硬汉嵌入式论坛

 找回密码
 立即注册
查看: 328|回复: 7
收起左侧

[BOOT/IAP] 求助,BOOT跳转APP后进入__main出现硬件报错

[复制链接]

10

主题

50

回帖

80

积分

初级会员

积分
80
发表于 2025-3-28 09:47:36 | 显示全部楼层 |阅读模式
本帖最后由 jet1999 于 2025-3-28 10:00 编辑

如题。
最近在跑一个demo,BOOT中加载外部Flash(主要代码也放在外部Flash)。
从BOOT可以跳转到APP的.s启动文件。

然而,
[C] 纯文本查看 复制代码
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

运行到BX R0就会出现硬件报错,报错的是unaligned。
奇怪就奇怪在,我的项目没加入TouchGFX之前是可以正常运行的,加入TouchGFX之后,就会硬件报错,目前还没有头绪。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-3-28 15:45:46 | 显示全部楼层
这个需要配置下MPU

石锤内存访问不支持非对齐是否STM32H7的硬件bug
https://www.armbbs.cn/forum.php? ... 4562&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

10

主题

50

回帖

80

积分

初级会员

积分
80
 楼主| 发表于 2025-3-28 16:18:54 | 显示全部楼层
eric2013 发表于 2025-3-28 15:45
这个需要配置下MPU

石锤内存访问不支持非对齐是否STM32H7的硬件bug

在SystemInit中开启MPU吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-3-28 17:05:21 | 显示全部楼层
jet1999 发表于 2025-3-28 16:18
在SystemInit中开启MPU吗?

在boot里面配置好,app不需要再配置了。
回复

使用道具 举报

10

主题

50

回帖

80

积分

初级会员

积分
80
 楼主| 发表于 2025-3-28 17:20:06 | 显示全部楼层
eric2013 发表于 2025-3-28 17:05
在boot里面配置好,app不需要再配置了。

BOOT跳转到APP里面 不需要关闭MPU吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-3-28 17:24:05 | 显示全部楼层
jet1999 发表于 2025-3-28 17:20
BOOT跳转到APP里面 不需要关闭MPU吗?

不需要,我们没关过。
回复

使用道具 举报

10

主题

50

回帖

80

积分

初级会员

积分
80
 楼主| 发表于 2025-3-29 10:09:18 | 显示全部楼层
本帖最后由 jet1999 于 2025-3-29 10:10 编辑
eric2013 发表于 2025-3-28 17:24
不需要,我们没关过。

反馈一下,测试结果。
目前不知道哪个区域的ram导致的unaligned,因此,把所有地址都配置成了如下配置:
[C] 纯文本查看 复制代码
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress = 0x0;
  MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

并且在SystemInit中加入了
[C] 纯文本查看 复制代码
void SystemInit(void)
{
  /* Configure the Vector Table location -------------------------------------*/
  SCB->VTOR = INTVECT_START;
  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();
  /* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  SCB->CPACR |= ((3UL << 20U)|(3UL << 22U));  /* set CP10 and CP11 Full Access */
#endif
}

配置成这样之后,可以成功进入main函数了,有时间再仔细找一下问题
回复

使用道具 举报

10

主题

50

回帖

80

积分

初级会员

积分
80
 楼主| 发表于 2025-3-30 13:11:32 | 显示全部楼层
今天试了一下,找到有问题的地方了。我在APP里面使用外部HyperRAM作为主要的 ram地址,一开始配置的是
[C] 纯文本查看 复制代码
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER3;
  MPU_InitStruct.BaseAddress = 0x90000000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_8MB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

为了解决非对齐访问以及保证数据一致性,配置成
[C] 纯文本查看 复制代码
  MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 00:51 , Processed in 0.323876 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表