打印

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

[复制链接]
6975|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的个数。

使用特权

评论回复
5
heuyck| | 2009-10-29 10:43 | 只看该作者
这类东西不可能要求编译器全部给你检查全了
在函数/中断里用大容量数组本来就违反了编程常理
栈 可不是给你拿来当malloc用的

使用特权

评论回复
6
heuyck| | 2009-10-29 10:45 | 只看该作者
还有 keil可以生成一个 项目名字.htm
里面有各函数的调用连接 还有栈深度的估测
可以作为大致参考

使用特权

评论回复
7
Wxy8030|  楼主 | 2009-11-2 13:44 | 只看该作者
TO  heuyck:
栈空间不光是中断里用的.......主函数也要用;
再说只要要用到该空间,就必须对尺寸有所判断,而不管用了多少,因为任何一个栈空间超出其使用范围都是必须禁止的;

*.htm 文件确实有类似说明,待研究中!

使用特权

评论回复
8
itelectron| | 2009-11-2 14:00 | 只看该作者
学习

使用特权

评论回复
9
biao.l| | 2009-11-2 18:07 | 只看该作者
在启动文件里面有设置的

使用特权

评论回复
10
itelectron| | 2009-11-25 16:32 | 只看该作者
学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

2054

帖子

2

粉丝