堆栈发生问题时会产生很多奇怪的问题,我就说说我看到的一些现象。堆栈溢出后,程序和参数就会完全乱了套,出现程序重启或者系统崩溃。我当时是在对GSM模块通信进行调试的时候,在处理数据的时候使用了很多sprintf标准函数。就出现了通讯故障、断线或数据乱码等问题,由于自己对标准功能不熟悉。在一些处理上使用不合理。整个项目进行得磕磕绊绊。我觉得一定是某个地方出现了问题导致不稳定,自己的逻辑上没有错,找不到问题解决不了让我一度很沮丧。经过反复的测试后来我发现一个现象,两个连续的 for 循环,第一个运行正常然后第二个跳到第一个for循环中途就出现了重启。程序在这里就崩溃了。看到了问题就好处理了,经过观察我发现是指针乱序了,我意识到了可能是堆栈出现了问题。我把栈变大了,问题就得到了解决。 接下来说说我在哪里修改的。其实STM32中只修改了两个值,一个是stack_size的大小,一个是heap_size的大小。
遇到问题一定要多测试观察才能找到其中的问题,自身的知识要储备好,遇到问题才不会手忙脚乱
|