【发布时间】:2013-10-30 21:03:25
【问题描述】:
我正在将 megaAVR 用于使用 C 编码的嵌入式项目。设备有时会无缘无故地崩溃。表示代码中没有逻辑错误。
所以我的问题是,如果您遇到这种类型的崩溃,需要检查什么?
我的建议: 堆栈 - 使用太多堆栈。 内存 - 不适用,不使用 malloc。
更多? 它可能是哪种 AVR 专用?
【问题讨论】:
-
当设备无缘无故崩溃时,它很确定是代码中的逻辑错误。老实说,它几乎可以是任何东西。您是否在 ISR 和主代码之间同步数据?你是对的,检查你的堆栈使用情况。是否存在未处理的中断?中断触发太快了吗?当你的设备崩溃时,你可以附加一个调试器来找出它挂在哪里吗?您是否使用了未初始化的变量?你在某处有悬空指针吗?
-
这是一个大胆的声明,没有代码错误。奥卡姆剃刀建议相反。你有debug hardware 对吗?这就是开始的地方。我不确定不使用 malloc() 如何意味着没有内存错误 - 这是对可能的内存错误的非常狭隘的看法。我想没有人会在没有证据证明您的“完美代码”断言(即发布代码)的情况下有效地尝试回答这样一个模糊而广泛的问题。例如,考虑缓冲区溢出和未初始化的索引和指针。
-
它可能与软件有关,但也可能是由硬件问题引起的。你的环境是什么?你用的是开发板吗?确切的 MCU 类型是什么?
-
我也希望看到一些完美的代码,请发布...