打印

请问HEAP和STACK的SIZE如何估算?

[复制链接]
5815|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sioca|  楼主 | 2012-2-6 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟在编单片机小程序时经常会因为函数调用过多或者局部变量数组过大而导致STACK溢出,有时候溢出了还一下子发现不了,还以为是BUG,浪费很多时间。编译器中一般有STACK和HEAP的默认大小,不知道大家如何评估自己的程序需要多大的STACK HEAP空间的呢?是不是要在编程前就估算并且设定好呢?

相关帖子

沙发
yewuyi| | 2012-2-6 13:43 | 只看该作者
一般8、16位MCU编程,如果用不到OS的话,可以直接把HEAP设置为0

使用特权

评论回复
板凳
sioca|  楼主 | 2012-2-8 10:05 | 只看该作者
那请问STACK空间怎么评估呢?

使用特权

评论回复
地板
hyhmh| | 2012-2-8 11:39 | 只看该作者
本帖最后由 hyhmh 于 2012-2-8 12:01 编辑

这个 与 编译系统有关.
就C51而言
1)函数调用嵌套 深度
2)函数所带参数(入口参数与返回参数)会影响 堆栈
当然,具体要视 程序而定. 但 可编 一程序 监视 (将 最深的 深度  赋给 某一单元).
注: 参数 也通过 R寄存器 带入/带出.
特别要 考虑 中断程序的 设计 对 堆栈的影响.(如果 汇编, 通常可以 通过 中断程序的 堆栈使用 深度 与 子程序嵌套情况 来 导出 堆栈使用 情况---- 不过, 很少 有人 定量评估)

使用特权

评论回复
5
hyhmh| | 2012-2-8 11:58 | 只看该作者
一般 没有定量 评估 STACK 使用细节.
通常, 定性地 评估
1)出现STACK溢出, MCU必然会 无法返回原 调用点, 将导致Watchdog溢出.
2)STACK堆栈赋 RAM的 顶部 地址(入栈 指针-1的那种MCU), STACK 是否溢出 与 RAM 定义数量 相关.

使用特权

评论回复
6
wangjakn| | 2015-4-16 17:25 | 只看该作者

使用特权

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

本版积分规则

122

主题

419

帖子

1

粉丝