文章目录
- 1 . 前言
- 2 . Code, RO-data , RW-data, ZI-data解析
- 3 . RAM上电复位
- 4 . 细节扩展
- 5 . 总结
【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485
1 . 前言
MDK编译后,会列出Code, RO-data , RW-data, ZI-data,以下解析各段内容
2 . Code, RO-data , RW-data, ZI-data解析
- Code : 顾名思义就是代码区域
- RO-data(Read Only data) :是指常量数据, 程序编译下来把常量数据编译到RO-data区域,例如 const u16 ram = 5;
- RW-data(Read Write data) :是指在定义时赋予了非0的初始值,那么程序编译下来,会在code区写入对应数据,程序段运行时再从code区拿出对应数据赋予到ram对应区域,实现上电初始非0值,例如 u16 ram = 5;
- RI-data(Zero Initialie data) : 是指在定义时没有初始化或者初始化为0, 那么程序编译下来,ram1和ram2就会被认为在RI-data区域,例如 u16 ram1;u16 ram2 = 0;
3 . RAM上电复位
MDK编译时默认全ram复位,排除RW-data区域外,若不希望ram某个地址上电被复位,可通过勾选红框中NoInit,告诉编译器某段地址范围内不进行初始化段操作
4 . 细节扩展
另外编译结果还有堆和栈,MDK的堆和栈是自底向上的,与KeilC51反过来,KeilC51是自顶向下,内存排布有关各区域的描述这里尽量保持简洁风格描述
5 . 总结
编译程序知道编译后存放的区域有助于理解编译器的行为,从而使我们知道怎样可以做到更好,并且有更多的思路去开发,文章内容保持简洁风格,通俗易懂,谢谢观看。
技术交流群 : 745662457
群内专注 - 问题答疑,技术研究