嵌入式技术论坛
直播中

贾小龙

8年用户 1705经验值
私信 关注
[问答]

请教大神编译时内存的分配问题

最近在使用沁恒的ch576,正好rt-thread BSP里面有,就下下来运行了一下。
结果msh出不来,后来把msh的栈改小后出来。
msh出来后,就用free看了下内存,结果total只有4780,只剩120 available。
可明明有32K RAM,怎么变4K了,顺着free的源代码找到了board.h中堆起始地址与结束的定义

#define CH579M_SRAM_SIZE 32
#define CH579M_SRAM_END (0x20000000 + CH579M_SRAM_SIZE * 1024)
#if defined(__ARMCC_VERSION)
extern int Image$$
RW_IRAM1

ZI

Limit;
#define HEAP_BEGIN ((void *)&Image

RW_IRAM1

ZI

Limit) #elif __ICCARM__ #pragma section="CSTACK" #define HEAP_BEGIN (__segment_end("CSTACK")) #else extern int __bss_end; #define HEAP_BEGIN ((void *)&__bss_end) #endif #define HEAP_END CH579M_SRAM_END 就摸到 Image

RW_IRAM1

ZI$$Limit 这个变量,好像是编译器自动算出来的,就一下子明白了: 是被C中的非const静态变量占了,Keil编译完输出 Program Size: Code=87516 RO-data=3360 RW-data=632 ZI-data=27276 就是RW-data和ZI-data 但是32 * 1024 - 27276 - 632 = 4860,与free显示的total4780还差了80 所以我的问题时那80被什么占了

回帖(2)

贾飞小

2023-3-14 10:34:46
建议结合链接脚本和MAP来看看。
举报

贾小龙

2023-3-14 10:36:57
2.jpg
举报

更多回帖

发帖
×
20
完善资料,
赚取积分