关于单片机的两个细节

  • Eagleson
  • LV5工程师
  • |      2017-12-13 08:48:01
  • 浏览量 5963
  • 回复:4
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个字节.
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
18218811680 2017-12-27
学习了。单片机学习由浅入深,就是要注意这些方方面面的细节。
0   回复
举报
发布
Eagleson 回复 2017-12-28
嗯:handshake
0   回复
举报
13008979232 回复 2018-01-24
66666666666666666666666顶楼主
0   回复
举报
wg3613 回复 2018-02-23
很好的经验分享,赞
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子