嗨,您好,
我声明了许多变量,例如以下示例......
静态UINT8_T测试__Attribute __((部分(“保留_mem_area0”),ZERO_INIT));
我的问题是......
1.在打印变量的地址后,它是0x7FD4804(在Sysram4 :)中。为什么?
2.为什么变量不存储在Sysram1中?
3.是否表示将在延长睡眠模式下清除变量?但是变量的值仍然是正确的,为什么?
4.此外,如果我想要保留一些“全局变量”或“函数静态变量”,则应添加这些变量“__Attribute __((”Retention_mem_area0“),Zero_Init)”描述,是真实的?
5.如果该区域已满,我该怎么知道?
6.如果我想给变量初始值,我可以写:“静态UINT8_T测试__Attribute __((部分(”保留_mem_area0“))))= 0xFF;”?
非常感谢。
关键词:
设备:
嗨,
/ mhv.
非常感谢!
嗨mhv,
我发现项目6的问题。
如果我使用“静态Int8_t time_zone __Attribute __((部分(”Retention_mem_area0“)))= 0x08;”,Init值0x08将位于Bin文件的0x14404地址。
它会导致我的bin文件变得大尺寸(从30 kB - > 80 kB)。0x9EE0和0x14403之间有0xFF。
我无法理解,你有什么想法吗?
非常感谢。
嗨斯坦利_yeh,
出于此的原因是,当您在保留存储区域中应用初始化值时,那就是保留存储区域远离实际代码作为地址,当您在保留区域中应用初始化变量时链接器无法正确处理它,并且生成的二进制文件在大地址中扩展(它将明确地硬码该特定存储器地址中变量的值以及直到该值的巨大填充)。作为周围的工作,可以将变量设置为零初始化,然后通过代码应用值。
谢谢mt_dialog.
非常感谢。:)