上面说的方法如果RW是经过压缩后的,就不准了,我也是刚发现。
网上搜了以下,有一个解决的帖子:https://www.sohu.com/a/431321566_505803。
主要思路是利用了“Region$$Table$$Base”,打开map文件能搜到。
“Region$$Table$$Base”这个地址开始的第5个字,就是Total ROM Size (Code + RO Data + RW Data)
[C] 纯文本查看 复制代码 extern uint32_t Region$$Table$$Base;
typedef struct
{
uint32_t addr_Code_RO_Limit; //Code + RO
uint32_t addr_RAM_Base; //RAM基址
uint32_t addr_RW_Length; //RW长度
uint32_t addr_func; //C库c_w.l中的dczerorl函数,见map文件
uint32_t addr_Image_Limit; //Code + RO + 压缩的RW初值,减去flash基址可得到代码大小
uint32_t addr_ZI_Base; //ZI基址
uint32_t addr_ZI_Length; //ZI长度
uint32_t addr_func2; //C库c_w.l中的handler_zi函数,应是清零ZI用
}RegionTable_t;
region = (RegionTable_t*)(uint32_t)&Region$$Table$$Base;
addr = region->addr_Image_Limit;
|