如何解决 ARM Coprtex 上的嵌入式系统编程中的堆栈损坏错误

Posted

技术标签:

【中文标题】如何解决 ARM Coprtex 上的嵌入式系统编程中的堆栈损坏错误【英文标题】:How to resolve the stack corrupt error in Embedded System Programming on ARM Coprtex 【发布时间】:2018-02-10 16:59:51 【问题描述】:

我正在尝试对 ARM Cortex M0+ MCU 进行编程。每隔一段时间,我都会收到堆栈损坏错误消息。 有什么方法可以找出错误的根源吗? 我不知道解决堆栈相关错误的方法

【问题讨论】:

检测到堆栈错误的点不太可能是它被破坏的点,因此没有直接的方法来确定来源。此外,检测堆栈错误不是 C 语言的一部分,它必须是您的运行时环境的一部分——我们无法确定它是如何检测错误的。向我们展示导致错误的代码和逐字错误文本会是一个更好的问题。 堆栈损坏可能是由于堆内存扩展和违反堆栈内存造成的。小心你的 malloc 或返回指针的使用。您可以检查将阻塞循环放入初始化代码的代码。你的代码中有异步中断处理程序等吗?您可以通过放置 while(1) 块来分隔级别;并查看是否发生异常。所以连续尝试可疑线路,找到问题线路。 【参考方案1】:

一种最佳做法是使用静态分析工具来确保您没有践踏任何堆栈或堆变量。

尝试将 clang 分析器作为一种易于使用的开源解决方案。

或者,如果您可以在主机上运行您的代码,您可以使用 gdb 或 valgrind 来尝试查找内存错误。

【讨论】:

以上是关于如何解决 ARM Coprtex 上的嵌入式系统编程中的堆栈损坏错误的主要内容,如果未能解决你的问题,请参考以下文章

LinuxQt在arm上开发,程序运行出错,illegal instruction如何解决

如何估计 ARM 平台上的程序消耗的能量? [关闭]

GPIO是啥?和单片机、ARM上的引脚是一个概念么

ARM+LINUX嵌入式系统的终端显示中文乱码解决

基于arm的多路温度采集控制系统需求分析

uclibc 和 arm 支持上的 Node.js