分区
编译:编译器编译链接烧录到芯片的代码期间
运行:芯片上电执行期间
分布
| flash/rom | ram | |
|---|---|---|
| 编译 | code(.text),常量(.rodata),rw-data(.data) | |
| 运行 | code(.text),常量(.rodata),rw-data(.data) | rw-data(.data),zi-data(.bss),堆,栈 |
编译
code:也叫.text,只读,编译链接完成后的代码指令,cpu通过i-code总线读取;
常量:也叫.rodata,只读,运行时,cpu通过d-code总线读取;
rw-data:也叫.data,读写,编译阶段初始值非0 的全局/static变量(全局和局部),cpu通过d-code总线读取。
运行
rw-data(.data):芯片上电通过启动文件,将rw-data从flash复制到ram中,运行时cpu通过系统总线读写;
zi-data(.bss):也叫bss,读写,上电初始化时初始化为0/未初始化 的全局/static变量(全局和局部),cpu通过系统总线读写;
堆:手动分配和释放;
栈:编译器自动分配和释放。
总结
1、占用flash/rom大小:code+常量+rw-data
2、占用ram大小:rw-data+zi-data+堆+栈
3、cpu上电将rw-data复制到ram中(分析启动文件),通过i-code读取代码指令,d-code读取常量,系统总线读写ram中的rw-data、zi-data、堆、栈内容来使程序正常工作。
附:CM3总线框图
