【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485
1 . 前言
一般大家开发KeilC51平台时,变量定义在 idata , xdata 区,而C51单片机的栈空间则是在 idata 区,因此要预估充足的空间给予栈使用
2 . MAP文件内DATA MEMORY图解
3 . 总结
图一可以看到原始工程即使不定义变量,DATA MEMROY也会占用9个字节,前8字节为R0-R7工作寄存器,最后一个则为栈顶
图二可以看到原始工程仅定义一个u8变量,DATA MEMROY占用10个字节,前8字节为R0-R7工作寄存器,0008H地址为定义的变量地址,最后一个则为栈顶
图三可以看到原始工程定义一个bit变量以及u8变量,DATA MEMROY占用33个字节,前8字节为R0-R7工作寄存器,0008H地址为定义的变量地址,bit定义则在0020H开始,此处也就验证了51内核单片机的bit分布在20H到2FH之间,因此只要定义了bit变量,则考虑有16字节编译分配MAP链接了,最后一个还是栈顶,因此栈顶到0xFF之间要预留起码充足的空间防止栈溢出
技术交流群 : 745662457
群内专注 - 问题答疑,技术研究