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

[复制链接]
6655|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寄存器 带入/带出.
特别要 考虑 中断程序的 设计 对 堆栈的影响.(如果 汇编, 通常可以 通过 中断程序的 堆栈使用 深度 与 子程序嵌套情况 来 导出 堆栈使用 情况---- 不过, 很少 有人 定量评估)
hyhmh 发表于 2012-2-8 11:58 | 显示全部楼层
一般 没有定量 评估 STACK 使用细节.
通常, 定性地 评估
1)出现STACK溢出, MCU必然会 无法返回原 调用点, 将导致Watchdog溢出.
2)STACK堆栈赋 RAM的 顶部 地址(入栈 指针-1的那种MCU), STACK 是否溢出 与 RAM 定义数量 相关.
wangjakn 发表于 2015-4-16 17:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

419

帖子

1

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