打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
IAR堆栈分配原则
IAR堆栈分配原则 2012-03-28 13:12:37

 http://blog.chinaunix.net/uid-7921647-id-3151560.html

在执行一个函数的时候,这个函数所需的堆栈空间在一开始就全部分配了,另外还有额外的LR也要被压栈
遇到寄存器压栈SP-4,其它的SP每次分配8的倍数个单元,但是优先要补充因为压入寄存器导致的不是8的倍数。也就是说,每次(寄存器压栈个数+局部变量压栈个数)总是8的倍数,如果遇到临界情况(也就是数据刚好是8的倍数个),则为保险起见多分配8个空间(少的时候多分配,多了就不再多分配了,24个为临界:如果刚好是24个,则多分配8个;多于24个的8的倍数,不多分配--IAR)

IAR堆栈的分配原则:
①在刚一跳转到函数时,这个函数所需要的堆栈空间就全部一次被分配完成了;
②这个函数需要分配堆栈的内容有要保存的寄存器(如LR)和函数内部用到的全部局部变量;
③以上堆栈分配的总和是8的倍数,例如即使总和是9,也要分配16个,总和在9~15之间的都是分配16个。如果要分配的堆栈字节数小于等于24并且刚好是8的倍数,则额外多分配8个字节;大于24则不再多分配。也就是说如果函数需要的堆总栈字节数(要保存的寄存器+函数内部的局部变量)是8、16、24,则实际分配了16、24、32个空间



******************************
问题:在Cortex-M3及以后的处理器中,如果使用者只运行在特权模式下,那么IAR 分散描述文件中的CSTACK 分配的RAM大小没什么实际用处了。因为在中断向量表中已经指定了SP的初始地址是在整个RAM的顶端,并不是在CSTACK里面(当然如果指定到CSTACK里面也可以,这时候就有用处了),所有的异常是在现有MSP中处理的,也不涉及到CSACK中的“堆栈”空间。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
浅谈嵌入式 MCU 软件开发之应用工程的堆与栈
STM32编程:是时候深入理解栈了<一>
开发51单片机操作系统应注意的问题
【新提醒】[教程]逆向反汇编第四课
利用反汇编手段解析C语言函数
lua指令执行相关的几个数据结构笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服