注:个人理解所书,有误请指出,转载请注明出处
对应hex目录下的.map文件,查找_flash_end看看
对应内存驱动memd.def文件 USER_DATA_BASE
USER_DATA_BASE - flash_end 就是ROM剩余
USER_DATA_BASE:= 0x00399000
0xffffffff8237e360 _flash_end = .
ROM剩余:399000- 37e360
前面的是总线片选
在XXXXX.map-stage1文件中查找 heap_size 就是编译完 剩余的ram
这个ram 包括在tgt_app_cfg.h里配置的cswHeapSize 和 cosHeapSize,所以 heap_size - cswHeapSize - cosHeapSize的剩余值不能小于300K
memd.def中RAM_SIZE + _xcpu_overlay_secton_sizelimit等于RAM总大小,也就是说
_xcpu_overlay_secton_sizelimit 其实就是XCPU_OVERLAY_BASE值
********************************************************************************************************************************
当编译空间超出时会有信息,例如
section .user_data load at [ffffffff82399000,ffffffff823fbfff] overlaps section .get_compressed_data loaded at [ffffffff822db3b0,ffffffff823a079f]
超过的空间:3a079f - 399000
ROM未压缩的结束地址是:2db3b0,之后的部分在开机时拷贝到RAM
|--USER_DATA_BASE--|--USER_DATA_SIZE--|--CALIB_BASE--|--FACT_SETTINGS_BASE--|
代码存储区从0到USER_DATA_BASE
---------------------------------------------
USER_DATA_SIZE 是存储例如短信,电话本等的信息
这个的组成在tgt_app_cfg.h。短信对应CSW中,电话本对应VDS1中
.uSecCnt定义了占用扇区的个数,TGT_DSM_PART_CONFIG中总扇区的个数必须比USER_DATA_BASE小一个扇区(4KB)
例如:USER_DATA_BASE = 0x00063000 (每个扇区4KB), 总扇区个数为99,那么TGT_DSM_PART_CONFIG中扇区个数最大为98
DSM_PART_COUNT则定义了存储块个数,与TGT_DSM_PART_CONFIG中个数相对应
---------------------------------------------
CALIB_BASE 是校准参数存储区
FACT_SETTINGS_BASE 是工厂设置参数存储区