OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 461|回复: 1

关于H7中D2 Domain中SRAM变量初值问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-4-10
在线时间
2 小时
发表于 2024-5-10 09:36:11 | 显示全部楼层 |阅读模式
1金钱
__attribute__((section (".RAM_D1")))   uint8_t TEST_arr[]="this is a test fun of 485 transmit\r\n";
__attribute__((section (".RAM_D2")))   uint8_t TEST1_arr[]="this is a test fun of 485 transmit\r\n";

TEST_arr在D1的AXIRAM中,TEST1_arr在D2的SRAM中
哪位大神能解释一下定义在D2域SRAM中带初值的变量为啥是乱码,难道D2域的RAM不能访问flash??


刚进DBUG状态TEST1_arr是没有初值的。





运行之后TEST1_arr有初值了但是是乱码。




通过串口发出两个字符串TEST_arr、TEST1_arr也显示一个正常一个是乱码。


重新给TEST1_arr赋值后正常了!


串口显示也正常了。
哪位大神能解释一下定义在D2域SRAM中带初值的变量为啥是乱码,难道D2域的RAM不能访问flash??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-4-10
在线时间
2 小时
 楼主| 发表于 2024-5-10 10:38:32 | 显示全部楼层
H7的启动文件startup_stm32h743xxxx.s中,在调用main函数前会先调用进行堆栈初始化,再调用SystemInit函数进行D2区域RAM(即SRAM1~3)的使能,初始化和使能顺序颠倒了,

因此,如果直接在D2区域声明变量,会导致D2区域变量未被初始化。
如果想要正常使用D2区域SRAM,需要进行以下操作:
1、定义宏DATA_IN_D2_SRAM
2、找到启动汇编文件中的“bl SystemInit”将其剪切至“b LoopCopyDataInit”前即可,如下图所示
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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