打印

ARM7堆栈大小如何确定?

[复制链接]
4073|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
下面是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

搜狗截图20150625141929.png (32.98 KB )

搜狗截图20150625141929.png

相关帖子

沙发
mini1986| | 2015-6-25 17:19 | 只看该作者
根据实际情况来的吧,不用的就设置成0,用户用的多就分的大点,irq用的少就分的少点......

使用特权

评论回复
板凳
airwill| | 2015-6-26 07:57 | 只看该作者
这是个对于初学者, 比较难捉摸的一个方面.
一般的做法, 都是设置得足够大了事.
当然对于资源紧张的应用, 那最好准确了解堆栈的使用要求, 一般有两个办法:
静态分析法, 从汇编代码分析最大调用深度(局部变量等)计算最大堆栈需求
动态测量法, 足够复杂环境动态运行相当的时间, 通过堆栈空间的标志位实测堆栈需求

使用特权

评论回复
评论
feiyinglala 2016-6-9 10:02 回复TA
专业 
地板
hualiming025|  楼主 | 2015-6-26 09:02 | 只看该作者
airwill 发表于 2015-6-26 07:57
这是个对于初学者, 比较难捉摸的一个方面.
一般的做法, 都是设置得足够大了事.
当然对于资源紧张的应用, 那 ...

谢谢分析,指出了两种分析方法。简单点说,如果我程序(c语言)中定义了100个变量,堆栈大小你觉得设置多少比较合适?150,200,还是300?另外是不是一个变量就需要一个堆栈空间?

使用特权

评论回复
5
hualiming025|  楼主 | 2015-6-26 09:04 | 只看该作者
mini1986 发表于 2015-6-25 17:19
根据实际情况来的吧,不用的就设置成0,用户用的多就分的大点,irq用的少就分的少点...... ...

比如这个USR_Stack_Size  EQU     0x00000400
后面的400指的是字节堆栈个数吗?一个堆栈是8个bit吗?

使用特权

评论回复
6
mini1986| | 2015-6-26 09:09 | 只看该作者
堆栈大小是0x00000400个字节......

使用特权

评论回复
7
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

粉丝