保留RAM区域的使用

7个员额/0个新员额
最后发表
CD
离线
最后看到:3年9个月前
加入:2015-11-18 02:51
保留RAM区域的使用

你好,

请让我问一个关于“Retention RAM”和“SysRAM(page0,1)”用法的问题。
我们正在努力缩小代码大小。(RAM区域(代码)比我们的想法小…)
我已经阅读了UM-B-011文档,但仍然没有信心使用这些区域。

= =我的条件
延长睡眠时间
- ble_connection_max_user = 1

= =我的理解
关于UM-B-011, ATT、ENV和MSG堆的大小为:
丙氨酸1036字节
ENV 360字节
MSG 1324字节
根据Scatter文件,这些堆被分配给LR_RETENTION_RAM2。
(我也检查了真实的地图文件。)
和“arch_main。o (BLE_exchange_memory)”也被分配到LR_RETENTION_RAM2区域。

我列出的地图文件如下:
————————
负载区域LR_RETENTION_RAM2(基数:0x00080768,大小:0x00000000,最大:0x00002898,绝对)

执行区域ZI_RET20(基区:0x00080768,大小:0x00000a8c,最大值:0x00002B8,绝对值,未调整)

Base Addr Size Type Attr Idx E Section Name Object

0x00080768 0x0000040c零RW 541 heap_db_area jump_table.o
0x00080b74 0x00000154零RW 542 heap_env_area jump_table.o
0x00080cc8 0x0000052c 0 RW 544 heap_msg_area jump_table.o

执行区域ZI_RET21 (Base: 0x00082a20, Size: 0x000005e0, Max: 0x000005e0, ABSOLUTE)

Base Addr Size Type Attr Idx E Section Name Object

0x00082a20 0x000005de 0 RW 287 BLE_exchange_memory arch_main.o . 0x00082a20 0x000005de 0 RW 287
————————
关于这个.map文件,0x82a20 - (0x80cc8 + 0x52c) = 0x182c(字节)似乎是空的。所以我们可以自由使用这块区域。
>问题1。这是正确的吗? ?

如果问题1是正确的,我们可以使用这些区域来预订任何变量作为__attribute((section(" retention_mem_area0"),zero_init))。在Scatter文件中有两个地方定义了retention_mem_area0。(当ext-sleep使用时)如果retention_mem_area0的第一个位置(0x20008000)不足以分配保留变量,这些变量将被分配到第二个位置(0x80768-)。
>问题2。这是正确的吗??(事实上,我已经测试过了,而且似乎有效…)

我可以将一些变量从0x200000000区域移动到0x80000区域,但我不能通过添加“some_file”来移动some_file.c中的function()代码。到LR_RETENTION_RAM2区域。我在通过SmartSnipetts编写Flash Memory代码时出错,这是正确的行为吗?我认为这是正确的,因为我没有定义“some_file”。将scatter_file设置为“执行区域”。
>问题3。是否可以将函数/代码(非变量)移动到此自由保留区(0x811f4-0x82a20)编辑散点文件(如执行区域或其他内容)??

如果我能对此有任何评论,我将不胜感激。
非常感谢您的提前支持。

顺致敬意,
CD

设备:
MT_dialog
离线
最后看到:1个月14个小时前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

是的,你可以使用区域来放置数据。事情是这样的,当你在扩展睡眠时,系统ram不会关闭,所以所有的系统ram是保留的,当你使用__attribute((section(" retention_mem_area0"),zero_init)),如果你的保留是满的,额外的变量将被放置在系统ram中,当您在scatterfile中指示使用特定属性(retention_mem_area0)放置变量时。我认为您使用Smart Snippets工具的经验是正确的。为了将函数从系统RAM移动到保留RAM(例如0x80000区域),您必须在已经存在的Load regions中声明新的执行区域0x80000。

由于MT_dialog

CD
离线
最后看到:3年9个月前
加入:2015-11-18 02:51
嗨MT_dialog,

嗨MT_dialog,

非常感谢您的回复。
我可以理解,我们可以将此保留区用于数据。实际上,它工作得很好。
将数据从系统RAM转移到保留RAM显然使0x20000000上的内存区域获得更多的空间来编码,我想。(因为除了STACK和HEAP,我们默认不使用0x80000区域。当然,总的大小几乎是一样的,不过……)
-对吗?(现在我对DA14583上的代码大小限制有一个问题……我正在搜索以减少/腾出代码空间。我担心的是,即使我将数据移动到Ret.RAM区域,0x20000000区域的大小也不会腾出空间……我想这样会使空间在0x20000000上进行编码。)

关于执行区域(ER),我仍然从SmartSnippets....得到错误

从文件ble_app_barebone_580.hex中读取0字节。15684字节被忽略,因为它们的记录地址大于或等于0x80000。

我只是在测试移动“user_barebone”。o”到BLE APP Barebone的留存区。我尝试改变SDK标准的分散文件“scatterfile_common”。“喜欢附加文件。但是我还不能去。我的分散文件有什么问题??(示例分散文件有点复杂,但我引用引导加载程序对它进行了修改。sct在辅助引导加载程序的例子,我希望它工作....但现在还不能。)

如果有人能给我一些建议,我将不胜感激。

顺致敬意,
CD

凯西
离线
最后看到:2年3个月前
加入:2016-07-29远
嗨,你解决这个了吗

嗨,你解决这个问题了吗?我和你面临同样的问题,你能分享一下你的解决方案吗?

MT_dialog
离线
最后看到:1个月14个小时前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

一个对话框的当地成员将联系你以了解更多的细节。

由于MT_dialog

凯西
离线
最后看到:2年3个月前
加入:2016-07-29远
嗨,Dialog,我也遇到了这个

你好,Dialog,我也遇到这个问题。我的应用程序受到代码大小的限制。我也希望能起到一些作用。o到LR_RETENTION_RAM2。你能给我举个例子吗?谢谢。

MT_dialog
离线
最后看到:1个月14个小时前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

正如您在其他文章中提到的,我们将直接与您联系,因为没有一个示例超过32KB的代码,您可以用Keil的评估版本编译。

由于MT_dialog