[STM32H7] STM32H7A 链接器 RAM 区域定义与限制

[复制链接]
224|10
柴库柴库 发表于 2025-9-29 12:37 | 显示全部楼层 |阅读模式
, , , AC, ,
本帖最后由 柴库柴库 于 2025-10-2 19:01 编辑

链接脚本对 AXI RAM 的分区是否存在限制?

我已成功将 SRAM1、2、3(256K、384K、384K)划分为两个 512K 的分区。

RAM_EXEC (xrw) : ORIGIN = 0x24000000, LENGTH = 496K
  RAM_NOCACHE (xrw)      : ORIGIN = 0x2407C000, LENGTH = 528K
.DATA_RAM_NOCACHE  :
  {   . = ALIGN(4);
   _snocachedata = .;   
    *(.DATA_RAM_NOCACHE)         
    *(.DATA_RAM_NOCACHE*)
    . = ALIGN(4);      
    _enocachedata = .;  
  } >RAM_NOCACHE

   _sinocachedata = LOADADDR(.DATA_RAM_NOCACHE);


CubeIDE中的构建分析器在编译后会报告预期的内存区域,但在执行代码时却抛出了内存管理异常。

公羊子丹 发表于 2025-9-30 07:22 | 显示全部楼层
你这个问题看起来不是链接脚本写错,而是运行时访问到非法地址引发的 MemManage Fault。
周半梅 发表于 2025-9-30 07:23 | 显示全部楼层
AXI SRAM 在 H7 上确实有 cache 和非 cache 区的划分,你的分区方式要注意 64KB 对齐。
帛灿灿 发表于 2025-9-30 07:24 | 显示全部楼层
如果你只用 Ctrl+H 全局搜索函数名,也能找到调用点,不过有时会包含注释里的。
童雨竹 发表于 2025-9-30 07:27 | 显示全部楼层
你用了 496K + 528K,已经超过了 AXI SRAM 的 1MB 总容量,确认一下是不是算错了。
万图 发表于 2025-9-30 07:28 | 显示全部楼层
CubeIDE 的 build analyzer 只检查链接脚本,不会保证运行时地址一定合法。
Wordsworth 发表于 2025-9-30 07:29 | 显示全部楼层
建议在调试时开 MPU 配置,把 nocache 区域显式设成 Normal non-cacheable。
Bblythe 发表于 2025-9-30 07:30 | 显示全部楼层
还有可能是访问 nocache 段的指针没初始化好,跑到未映射的区。
Pulitzer 发表于 2025-9-30 07:31 | 显示全部楼层
你可以试着先用 ST 官方给的 scatter file 模板,确认能跑,再改成自己分区。
Uriah 发表于 2025-9-30 07:32 | 显示全部楼层
如果一定要拆分成 cache / nocache 区,建议用 MPU 而不是单纯靠链接脚本划分。
Clyde011 发表于 2025-9-30 07:33 | 显示全部楼层
我之前在 H743 上遇到过类似情况,最后是因为 DMA 用到了 cacheable 区导致异常,换到 DTCM 就正常了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

80

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部