gpt4 book ai didi

c - 如何在运行时使用 C 查找微 Controller 中的堆栈溢出

转载 作者:行者123 更新时间:2023-12-05 02:22:21 26 4
gpt4 key购买 nike

我正在 STM32 微 Controller 上创建应用程序。我正在使用一些库堆栈。在那个堆栈之上,我正在使用我的应用程序。我有两个问题:

  1. 如何在运行时检测和处理堆栈溢出。因为我不知道该库使用了多少内存。

  2. 如果我从头开始开发代码,如何在运行时检测和处理堆栈溢出。我读了一些我们必须为每个声明保留一些计数的地方。这是找到它的正确方法还是任何标准方法。

最佳答案

如果您受限于您的设备并且没有可用的“高度复杂”工具,您至少可以尝试“旧方法”。一个简单的堆栈守卫可能会有所帮助。在你的代码中的某处(取决于你使用的工具),必须有堆栈区域的定义。类似于:

.equ         stacksize, 1024

stack: .space stacksize,0

(gnu 作为语法,你的可能不同)

使用您设备的启动代码在某处将堆栈寄存器初始化为堆栈区域的顶部地址。

然后栈守卫会在栈顶和栈底添加一个“魔数(Magic Number)”:

.equ         stackmagic,0xaffeaffe
.equ stacksize, 1024


stacktop: .int stackmagic
stack: .space stacksize,0
stackbottom: .int stackmagic

如果 stackmagic 值仍然存在,则使用一些代码至少定期检查(例如在定时器中断例程中或 - 如果可用 - 在您的调试器中)。

关于c - 如何在运行时使用 C 查找微 Controller 中的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29603570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com