打印
[51单片机]

关于单片机的一些细节

[复制链接]
659|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小半|  楼主 | 2020-3-3 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Stack分配到RAM的哪个地方?

   keil MDK中,我们只需要定义各个模式下的堆栈大小,编译器会自动在RAM的空闲区域选择一块合适的地方来分配给我们定义的堆栈,这个地方位于RAM的那个地方呢?通过查看编译列表文件,原来MDK将堆栈放到程序使用到的RAM空间的后面,比如你的RAM空间从0x4000 0000开始,你的程序用掉了0x200字节RAM,那么堆栈空间就从0x4000 0200处开始。具体的RAM分配,其实你可以从编译后生成的列表文件“工程名.map”文件中查看。
关于float类型

在keil中,在不选择"Optimize for time"编译选项时,局部float变量占用8个字节(编译器默认自动扩展成double类型),如果你从Flash中读取一个float类型常量并放在局部float型变量中时,有可能发生意想不到的错误:Cortex-M3中可能会出现硬fault.因为字节对齐问题.
但有趣的是,一旦你使用"Optimize for time"编译选项,局部float变量只会占用4个字节.

使用特权

评论回复

相关帖子

沙发
zyx818102| | 2020-3-3 17:17 | 只看该作者
这是为什么呢,求解惑

使用特权

评论回复
板凳
airwill| | 2020-3-4 22:12 | 只看该作者
堆栈, 位于RAM的  IDATA  区的最高位置

使用特权

评论回复
地板
jjkks2018| | 2020-3-7 10:49 | 只看该作者
这个确认没注意,谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

6

帖子

0

粉丝