变量retention_mem_area0

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
6个员额/ 0个新员额
最后发表
stanley_yeh
离线
最后看到:2年2个月前
加入:2016-12-23 06:52
变量retention_mem_area0

你好,
我声明了很多变量,比如下面的例子…
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_Dialog
离线
最后看到:1周4天前
工作人员
加入:15 2013-12-06
你好,

你好,

  1. SysRAM 4是保留内存区域0所在的位置
  2. 见上图
  3. SysRAM4中的变量在睡眠期间保留
  4. 这是正确的
  5. 项目将无法连接
  6. 是的,就是这么做的

/ MHv

stanley_yeh
离线
最后看到:2年2个月前
加入:2016-12-23 06:52
非常感谢!

非常感谢!

stanley_yeh
离线
最后看到:2年2个月前
加入:2016-12-23 06:52
嗨MHv,

嗨MHv,
我发现这个商品有问题。
如果我使用"static int8_t time_zone __attribute__((section("retention_mem_area0")) = 0x08;",初始化值0x08将位于bin文件的0x14404地址。
这将导致我的bin文件变得很大(从30 KB -> 80 KB)。在0x9EE0和0x14403之间有0xFF。
我不明白,你知道吗?
非常感谢。

MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入:2015-06-08 34
嗨stanley_yeh,

嗨stanley_yeh,

原因是当你在保留内存区域应用一个初始化的值时,问题是保留内存区域与作为地址的实际代码相距甚远,当你申请一个初始化变量保留地区然后链接器无法妥善处理和生成的二进制扩展大地址(它将明确地硬编码值的变量在特定内存地址以及一个巨大的填充,直到该值)。作为一种变通方法,您可以将变量设置为初始化的零,然后通过代码应用一个值。

由于MT_dialog

stanley_yeh
离线
最后看到:2年2个月前
加入:2016-12-23 06:52
非常感谢。:)

非常感谢。:)