请问如果是extend_sleep,keil中定义变量是否无需加关键字retention_mem_area0

4 posts / 0 new
Last post
cgha
Offline
Last seen:2 months 6 days ago
加入:2016-03-23 13:05
请问如果是extend_sleep,keil中定义变量是否无需加关键字retention_mem_area0

另外怎么看RAM是否超出?我现在编译出来keil显示ROM总共占用31K左右,RAM大概占用13K,是否没有问题?,反正keil没有报错。我理解中RAM最大可以到18K。另外我程序执行的时候是extend sleep,只有特定情况下才会进入deep sleep(进入之后靠IO口唤醒),如果申请一块比较大的RAM空间(大概3.4K左右)做数据存储用,是否要声明到retention_mem_area0中。

Device:
CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
1.

1.
使用 Keil 编译时,若代码超出范围,由于链接脚本的限制,在链接的时候会报错。没报错说明没超出
2.
休眠模式有两种:extend 和 deep,两种最大的区别是前者所有的 RAM 在休眠的时候都不断电;后者只有 8K 的 RAM(retention_mem_area0) 不断电,其它的 RAM 断电。经测试,只有在广播/连接间隔 >2s 的情况下,deep sleep 才会比 extend sleep 节省功耗。
所以,若非情况特殊,一般建议只使用 extend sleep 即可;由此也就不需添加 retention_mem_area0。

cgha
Offline
Last seen:2 months 6 days ago
加入:2016-03-23 13:05
按照你的意思是在分配RAM的时候凯尔编译没有报的错

按照你的意思是在分配RAM的时候凯尔编译没有报的错,就不需要考虑放在哪里是吧?(我用的是extend sleep)。我提问这个问题是因为我看了那个um-b-011,感觉ram被分割成了好多份,现在看来全局变量无需担心分配到了哪里。

CYibin
Offline
Last seen:3 months 2 weeks ago
工作人员
加入:2017-12-14 02:48
是的,如果使用 extend sleep,便无须使用

是的,如果使用 extend sleep,便无须使用 retention_mem_area0 字段指定变量的存储位置。
只要编译不报错,一般不会有问题。