KeilC51平台 - 变量编译与栈区的影响


【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

一般大家开发KeilC51平台时,变量定义在 idataxdata 区,而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
群内专注 - 问题答疑,技术研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客 - L U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值