ARM7堆栈大小如何确定?

[复制链接]
4650|7
 楼主| hualiming025 发表于 2015-6-25 14:23 | 显示全部楼层 |阅读模式
下面是keil中ARM7的startup.s中有关不同状态下堆栈大小的设置。
右边的0x00000000或者0x0000008等是根据什么来确定的?思路是什么?


/*定义在不同模式下的堆栈的大小*/
UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000008
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000080
USR_Stack_Size  EQU     0x00000400

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mini1986 发表于 2015-6-25 17:19 | 显示全部楼层
根据实际情况来的吧,不用的就设置成0,用户用的多就分的大点,irq用的少就分的少点......
airwill 发表于 2015-6-26 07:57 | 显示全部楼层
这是个对于初学者, 比较难捉摸的一个方面.
一般的做法, 都是设置得足够大了事.
当然对于资源紧张的应用, 那最好准确了解堆栈的使用要求, 一般有两个办法:
静态分析法, 从汇编代码分析最大调用深度(局部变量等)计算最大堆栈需求
动态测量法, 足够复杂环境动态运行相当的时间, 通过堆栈空间的标志位实测堆栈需求

评论

专业  发表于 2016-6-9 10:02
 楼主| hualiming025 发表于 2015-6-26 09:02 | 显示全部楼层
airwill 发表于 2015-6-26 07:57
这是个对于初学者, 比较难捉摸的一个方面.
一般的做法, 都是设置得足够大了事.
当然对于资源紧张的应用, 那 ...

谢谢分析,指出了两种分析方法。简单点说,如果我程序(c语言)中定义了100个变量,堆栈大小你觉得设置多少比较合适?150,200,还是300?另外是不是一个变量就需要一个堆栈空间?
 楼主| hualiming025 发表于 2015-6-26 09:04 | 显示全部楼层
mini1986 发表于 2015-6-25 17:19
根据实际情况来的吧,不用的就设置成0,用户用的多就分的大点,irq用的少就分的少点...... ...

比如这个USR_Stack_Size  EQU     0x00000400
后面的400指的是字节堆栈个数吗?一个堆栈是8个bit吗?
mini1986 发表于 2015-6-26 09:09 | 显示全部楼层
堆栈大小是0x00000400个字节......
 楼主| hualiming025 发表于 2015-6-26 09:40 | 显示全部楼层
接下来的这三句代码什么意思?网上搜索了,有所了解,但还是不透彻。
Stack_Mem       SPACE   USR_Stack_Size
__initial_sp       SPACE   ISR_Stack_Size
Stack_Top       
是不是可以这样理解,用space申请堆空间时候,是按照 ISR_Stack_Size来申请所有模式下要用的总的空间大小。这个堆栈空间的起始标号是stack_Mem,结束标号就是Stack_Top,是这样吗?这三条语句顺序可以颠倒吗?或者有什么道理?求解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

114

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部