你好,
我声明了很多变量,比如下面的例子…
Static uint8_t test __attribute__((section("retention_mem_area0"), zero_init));
我的问题是…
1.在打印变量的地址之后,它是0x7FD4804(在SysRAM4中:)。为什么?
2.为什么变量不存储在SysRAM1中?
3.这是否意味着变量将在扩展睡眠模式中被清除?但是变量的值仍然是正确的,为什么?
4.另外,如果我想保留一些“全局变量”或“函数内静态变量”,这些变量应该添加“__attribute__((section("retention_mem_area0"), zero_init))”的描述,这是真的吗?
5.如果面积满了,我怎么知道?
6.如果我想给变量一个初始值,我可以写:"static uint8_t test __attribute__((section("retention_mem_area0")) = 0xFF;"?
多谢。
关键词:
设备:
你好,
/ MHv
非常感谢!
嗨MHv,
我发现这个商品有问题。
如果我使用"static int8_t time_zone __attribute__((section("retention_mem_area0")) = 0x08;",初始化值0x08将位于bin文件的0x14404地址。
这将导致我的bin文件变得很大(从30 KB -> 80 KB)。在0x9EE0和0x14403之间有0xFF。
我不明白,你知道吗?
非常感谢。
嗨stanley_yeh,
原因是当你在保留内存区域应用一个初始化的值时,问题是保留内存区域与作为地址的实际代码相距甚远,当你申请一个初始化变量保留地区然后链接器无法妥善处理和生成的二进制扩展大地址(它将明确地硬编码值的变量在特定内存地址以及一个巨大的填充,直到该值)。作为一种变通方法,您可以将变量设置为初始化的零,然后通过代码应用一个值。
由于MT_dialog
非常感谢。:)