774****com
gr5513 128k ram在sdk中是怎么划分的,从keil编译信息上看, 大概在90k左右编译就会报错,远没有128k。
Ping
可以参考如下GR551X的RAM Layout,Keil编译显示的RAM大小未包含协议栈16KB、主栈8KB以及RAM CODE等。
1. 协议栈16KB空间不可修改;
2. 主栈空间定义可参考custom_config.h文件如下定义,用于SDK中函数局部变量、函数入栈;
3. RAM CODE是指放在RAM中运行的代码,例如Sleep电源管理相关代码、Flash操作代码、协议栈Patch代码;
详情RAM Layout可以参考编译的MAP文件及toolchain\gr551x\source\arm\flash_scatter_common.sct。
176***577
你好,这个RAM CODE大概有多大?我使用gr5515 256k内存,kile编译最大只能使用到207k,再大就会报错,207K + 16K(协议栈) + 16K(主栈)= 239,还有17k都是RAM CODE使用了吗?
Ping
是的,你可以参考编译后的Map文件关于RAM分布说明:
176***577
1.官方的这个freertos例程,RAM_CODE都占了29K,有办法精简吗?这个lib文件
.o前面的勾好像没用,是自动链接需要的.o文件吗?
2.这样算下来用户APP可以用的内存: 256K - 16K(协议栈) - 16K(主栈)- RAM_CODE(29K)= 195K
176***577
3.图示部分的内存是消耗的是用户APP部分的内存吧,这个为什么还会消耗内存,.lib不是在RAM_CODE部分已经消耗了30K内存了?
Ping
1. LIB库编译的时候会自动Link,没有函数调用的不会编译进去,编译后的LIB库不能再去选择,相互之间有调用关系;
2. 系统中RAM包含以下三部分,RAM Code只是其中一部分内存占用,详情可参考MAP的RAM分布说明,你截图的是关于Flash空间占用部分;
(1) Code:存储到flash【Rom】中的程序代码;
(2) RO-Data:程序中的指令和常量,保存在Rom中;
(3) ZI-Data:zero initial,程序中用到的变量并且被系统初始化为0的变量字节数,程序运行时保存在RAM中;
(4) RW-Data:可读可写变量,初始化时候已经赋值了的变量字节数;
(5) RAM-Code: 拷贝到RAM中运行的代码字节数;
ROM大小 = Code + RO-Data + RW-Data
RAM大小 = RW-Data + ZI-Data+RAM CODE,另外也包含堆栈等定义的其它RAM空间
打开微信,使用“扫一扫”即可关注