Keil for Arm中关于“栈”尺寸的设置...?

[复制链接]
 楼主| Wxy8030 发表于 2009-10-20 13:39 | 显示全部楼层 |阅读模式
本帖最后由 Wxy8030 于 2009-10-20 14:36 编辑

以前从来没仔细研究这玩意,但总是隐约觉得既然不是编译器自动分配的,那么就有设置错误的可能......
今天仔细看了一下关于该尺寸的设置,发现设置的结果很难验证是否正确,我在map文件里找了半天,也没找到关于该尺寸的实际使用数量!
比如现在一般只设置三个尺寸,IRQ、SVC以及USR,其中USR和IRQ是肯定会用到的,就拿IRQ来说吧,如果在IRQ中要用到临时变量,编译器实际上就是在进入IRQ的时候给了一个临时变量的指针,至于该指针是否超出了它允许的使用范围,编译器并不检查,如果IRQ的堆尺寸设置为0x80,而实际上你定义了一个200字节的数组,编译器照样不会报任何警告或者错误!

不知道兄弟们是怎么对付这个可能出现BUG的问题的?如何验证“栈”尺寸设置的是否合理,即能保证程序的正确运行,又不至于浪费很多RAM空间!
arm_fan168 发表于 2009-10-20 14:16 | 显示全部楼层
你说的这是“stack”,一般翻译成“栈”而不是“堆”,“堆”是“heap”。在连接设置里应该可以设置各个模式的栈空间和需要的堆的大小。
 楼主| Wxy8030 发表于 2009-10-20 14:35 | 显示全部楼层
TO 2楼

确实是我写错,郑重更正!

问题不是如何设置,而是如何验证设置的合理性!
arm_fan168 发表于 2009-10-20 14:45 | 显示全部楼层
有一个办法很初级:初始化的时候把你想检查的空间全清0,然后让程序运行一段时间,想办法让程序运行到最坏情况(需要的栈最大的情况),然后用仿真器暂停运行,观察这个空间里数据为0的个数。
heuyck 发表于 2009-10-29 10:43 | 显示全部楼层
这类东西不可能要求编译器全部给你检查全了
在函数/中断里用大容量数组本来就违反了编程常理
栈 可不是给你拿来当malloc用的
heuyck 发表于 2009-10-29 10:45 | 显示全部楼层
还有 keil可以生成一个 项目名字.htm
里面有各函数的调用连接 还有栈深度的估测
可以作为大致参考
 楼主| Wxy8030 发表于 2009-11-2 13:44 | 显示全部楼层
TO  heuyck:
栈空间不光是中断里用的.......主函数也要用;
再说只要要用到该空间,就必须对尺寸有所判断,而不管用了多少,因为任何一个栈空间超出其使用范围都是必须禁止的;

*.htm 文件确实有类似说明,待研究中!
itelectron 发表于 2009-11-2 14:00 | 显示全部楼层
学习
biao.l 发表于 2009-11-2 18:07 | 显示全部楼层
在启动文件里面有设置的
itelectron 发表于 2009-11-25 16:32 | 显示全部楼层
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

2255

帖子

2

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

155

主题

2255

帖子

2

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