8 stack-overflow embedded error-handling
在嵌入式软件中,如何以通用方式处理堆栈溢出?我遇到了一些处理器,它像硬件一样保护最近的AMD处理器.维基百科上有一些技术,但那些是真正实用的方法吗?
任何人都可以提供一个明确的建议方法,适用于当今的32位嵌入式处理器吗?
Cra*_*een 12
理想情况下,您使用静态堆栈使用编写代码(没有递归调用).然后,您可以评估最大堆栈使用情况:
但即便如此,您仍然希望有一种检测并随后处理堆栈溢出的方法(如果可能的话),以获得更高的稳健性.这在项目开发阶段尤其有用.一些检测溢出的方法:
一旦你检测到它,那么你需要处理它.我不知道代码可以从堆栈溢出中优雅地恢复的许多方法,因为一旦发生这种情况,您的程序逻辑几乎肯定会失效.所以你所能做的就是
发生堆栈溢出,堆栈内存因调用堆栈太大而耗尽?例如,递归函数的深度过多。
有一些技术可以通过将已知数据放置在堆栈后面来检测堆栈溢出,这样就可以检测堆栈是否增长过多并覆盖它。
有一些静态源代码分析工具,例如 GnatStack、AbsInt 的 StackAnalyzer 和 Bound-T,它们可用于确定或猜测最大运行时堆栈大小。
| 归档时间: |
|
| 查看次数: |
4643 次 |
| 最近记录: |