FAQ使用section定义变量位于non_cacheable_data段

使用__attribute__ (( section (".non_cacheable_data"), aligned(8) ))定义某数组于non_cacheable_data段,且给该数组赋初值,下载程序后发现该数组并未赋对应初值?
更新时间:2022.03.30 浏览量:0

解决办法:使用该方式,non_cacheable_data改成mcal_data_no_cacheable,__attribute__ (( section (".mcal_data_no_cacheable"), aligned(8) ))即可;

原因:首先,我们先理解什么时候会给什么变量赋初值:

①data段的变量指的是已初始化的全局变量,静态局部变量也是data段

②在启动阶段会对data和bss段进行初始化,如图,

③如上图紫色部分,赋值内容部分由rom_start(变量初值存储在rom的起始地址)、rom_end(变量初值存储在rom的结束地址)、ram_start(变量ram地址)决定,最终存储这些指针的地址在__INIT_TABLE,实际如下图

④如③所示,最终第②步中对data段赋初值,其中对no_cacheable_data段赋初值,只会对_non_cacheable_data_start__ ~ _non_cacheable_data_end__ 这一段地址赋值

⑤non_cacheable_data包含mcal_data_no_cacheable和其它部分,当你把变量定义在non_cacheable_data段时,实际是把变量初值定义在_non_cacheable_data_end__ 之后,这样在②时不会把初值赋予该变量。


  • 上一篇:32K344 Normal WakeUp唤醒失败
  • 下一篇:多路ADC转换,DMA搬运的实现方式