大家好,
请让我询问关于“保留RAM”和“SYSRAM(PACE0,1)”的用法的问题。
我们正在努力收缩代码大小。(RAM区域(代码)小于我们的想法......)
我已经阅读了UM-B-011文档,但我仍然无法置信使用这些区域。
=我的条件=
- 使用延长睡眠
- ble_connection_max_user = 1
=我的理解=
关于UM-B-011,ATT的大小,ENV和MSG堆是:
ATT 1036字节
env 360字节
msg 1324字节
这些堆被分配给lr_retention_ram2,具体取决于分散文件。
(我还检查了真实的地图文件。)
和“Arch_Main.o(ble_exchange_memory)”也被分配给LR_Retention_Ram2区域。
我列出了地图文件作为下文:
--------
加载区域LR_Retention_RAM2(基数:0x00080768,尺寸:0x00000000,MAX:0x00002898,绝对)
执行区域zi_ret20(基数:0x00080768,大小:0x00000a8c,max:0x000022b8,绝对,uninit)
基础Addr大小类型attr idx e section name对象
0x00080768 0x0000040c zer rw 541 heap_db_area jump_table.o
0x00080b74 0x00000154 zer rw 542 heap_env_area jump_table.o
0x00080cc8 0x0000052c zer rw 544 heap_msg_area jump_table.o
执行区域zi_ret21(base:0x00082a20,大小:0x000005e0,max:0x000005e0,绝对)
基础Addr大小类型attr idx e section name对象
0x00082A20 0x000005de Zero RW 287 BLE_EXCHANGE_MEMORY ARCH_MAIN.O
--------
关于这个.map文件,0x82a20 - (0x80cc8 + 0x52c)= 0x182c(bytes)似乎是空的。所以我们可以自由地使用这一区域。
>问题1.它是否正确?
如果问题1是正确的,我们可以使用这些区域将任何变量预订为__attribute((部分(“Retention_mem_area0”),zero_init))。分散文件中定义了保留_mem_area0的两个位置。(当Ext-睡眠用法时)如果保留的第一名(0x20008000)是不足以分配保留变量,那么这些变量将被分配给第二位置(0x80768-)。
>问题2.是否正确?(实际上,我测试了,似乎工作......)
我可以将一些变量从0x200000000区域移动到0x80000区域,但是只需将“some_file.o”添加到lr_retention_ram2区域,我无法在you_file.c中移动代码等函数()。通过smartsnipetts写入闪存的代码,我出错了......它是正确的吗?我认为这是合适的,因为我没有定义“某些_file.o”以将散射为“执行的区域”。
>问题3.是否可以将函数/代码(不变量)移动到此游离保留区域(0x811f4 - 0x82a20)编辑散点图,如执行的区域或其他东西?
如果我对此有任何评论,那就非常感谢。
非常感谢您的支持。
此致,
光盘
嗨CD,
是的,您可以使用该区域将数据放在内部。是,当你在延长睡眠时,Sysram不会关闭,因此在使用__Attribute时保留所有Sysram((第(章节(“保留_MEM_AREA0”),ZERO_INIT))如果您的保留已满,则将额外的变量放在sysram中,每当你在actionfile中指示,以将变量与特定属性(Retention_mem_area0)放置在一起。我想你经过智能片段工具的经验是正确的。为了将功能从Sysram移动到保留RAM(例如0x80000区域)您必须在AllReady现有负载区域中排名在0x80000中的新执行区域。
谢谢mt_dialog.
嗨mt_dialog,
非常感谢你的回复。
我可以理解我们可以使用此保留区域进行数据。实际上,它很好。
“将数据从Sysram移动到保留RAM”显然我认为,使0x20000000的内存区域获得更多的房间到代码。(因为除堆叠和堆之外,我们不会使用0x80000区域。当然,总体大小几乎相同,但...)
- 这是正确的吗?(现在我对DA14583的代码大小限制有问题....我正在寻找警惕以减少/制作代码的房间。即使我将数据移动到Ret.ram区域,大小0x20000000地区不会让房间......我以这种方式假设为0x20000000的房间进行编码。)
关于执行区域(ER),我仍然来自SmartSnippets的错误....
我只是在测试BareBone示例上将“user_barebone.o”移动到保留区域。我尝试将SDK标准分散文件“ScitsFile_Common.sct”更改为类似附件。但我无法做到。我的分散文件有什么问题?(样本散射文件是一个复杂的小位,但我修改了它引用了辅助引导加载程序示例中的bootloader.sct,我希望它能够工作....但它尚不起作用。)
如果有人可以建议我,那就得到了很多欣赏。
此致,
光盘
嗨,你解决了这个问题吗?我与你的问题相同,你可以分享你的解决方案吗?
嗨CD,
对话框的当地会员将与您联系以获取更多详细信息。
谢谢mt_dialog.
嗨,对话框,我也遇到了这个问题。我的应用程序受代码大小的限制。我也希望将一些函数放在lr_retention_ram2。你能告诉我一个例子吗?谢谢。
嗨caiziee,
如您的其他帖子中所述,我们将直接与您联系,因为没有一个超过32KB的代码,您可以使用与keil的评估版本编译。
谢谢mt_dialog.