保留RAM区域的使用情况

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

你好,

请让我问一下“保留内存”和“syram (page0,1)”的用法。
我们正在努力缩小代码大小。(内存区域(代码)比我们想象的要小…)
我已经阅读了UM-B-011文件,但我仍然没有信心使用这些区域。

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

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

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

执行区域ZI_RET20 (Base: 0x00080768, Size: 0x00000a8c, Max: 0x000022b8, ABSOLUTE, UNINIT)

Base Addr Size Type Attr Idx E Section Name对象

0x00080768 0x0000040c RW 0 heap_db_area jump_table.o . 0
0x00080b74 0x00000154 RW 0 heap_env_area jump_table.o . 0
0x00080cc8 0x0000052c RW 0 heap_msg_area jump_table.o . 0

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

Base Addr Size Type Attr Idx E Section Name对象

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

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

我可以将一些变量从0x200000000区域移动到0x80000区域,但我不能通过添加“some_file.c”来移动some_file.c中的function()之类的代码。到LR_RETENTION_RAM2区域。我在通过smartsnipets写代码到闪存时出错…这是正确的行为吗?我认为这是合适的,因为我没有定义“some_file”。o”,将scatter_file作为“执行区域”。
>问题3是否有可能将函数/代码(而不是变量)移动到这个自由保留区域(0x811f4 - 0x82a20)编辑分散文件,如执行区域或其他东西??

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

最好的问候,
CD

设备:
MT_dialog
离线
最后看到:两个月前两个星期前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

是的,您可以使用该区域在其中放置数据。问题是,当你处于延长睡眠状态时,系统ram不会关闭,所以所有的系统ram都被保留,当你使用__属性((section(" retention_mem_area0"),zero_init)),如果你的保留已满,额外的变量将被放置在系统ram中,每当你在scatterfile中指示放置具有特定属性的变量(retention_mem_area0)。我想您使用Smart Snippets工具所经历的是正确的。为了将函数从系统移动到保留RAM(例如0x80000区域),您必须在现有Load regions中的0x80000中声明新的执行区域。

由于MT_dialog

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

嗨MT_dialog,

非常感谢您的回复。
我能理解我们可以用这个保留区保存数据。实际上,它工作得很好。
将数据从系统内存移动到保留内存显然使内存区域0x20000000得到更多的房间编码,我认为。(因为我们默认不使用0x80000区域,除了STACK和HEAP。当然,总尺寸几乎是一样的…)
-对吗?(现在我有一个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“喜欢附件文件。但是我还不能去。我的散点文件怎么了??(示例分散文件有点复杂,但我参考引导加载程序对其进行了修改。sct在辅助引导加载程序的例子,我希望它工作....但目前还不能。)

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

最好的问候,
CD

caiziee
离线
最后看到:2年5个月前
加入:2016-07-29远
嗨,你解决这个问题了吗

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

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

嗨,CD,

对话框的本地成员将与您联系以获得更多详细信息。

由于MT_dialog

caiziee
离线
最后看到:2年5个月前
加入:2016-07-29远
你好,对话,我也遇到了这个

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

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

嗨caiziee,

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

由于MT_dialog