1.看门狗是否喂狗成功
检讨是不是由于工程中打开了开门狗,当定时喂狗韶光到没有及时的喂狗,以是超时重启,这个问题比较好排查,以是列在第一个
2. 程序中的循环条件是否永久知足造成去世循环
这个问题也比较好检讨,用二分法debug跟一下看看末了卡在哪里,常见的便是代码里面有while(Flag),记得加一个timeout超时退出机制。
3. 裸机程序并发实行任务
实在现在很多单片机还是跑的裸机程序并没有上RTOS,没有任务调度,新手就随意马虎将中断触发的任务同时实行,或者当前中断触发的任务还未完成,另一个触发任务就来了,这种情形更多的是在SPI同挂、IIC同挂的外设上,以是得有一个互斥条件,一次只许可实行一个任务或者将正在实行的任务逼迫关闭。
4. 系统堆栈溢出
市情上一些M0/M3内核的芯片,内部资源较小,各个函数的嵌套调用会增大开销,这个问题比较暗藏,不太好查找,以是最好减少函数的嵌套调用,局部变量也会占用开销,会导致程序运行过程中所需的内存变小。以是最好减少在函数内部开辟较大的局部变量。把稳下这两点能办理大多数堆栈溢出的问题。
堆栈溢出
5. 越界访问
这种情形在数组和指针的调用上最为常见。要把稳,循环遍历数组时一定要关注下标不能超过数组的最大值,否则会产生一些莫名其妙错乱数据,造成系统崩溃。还有便是指针解引用时一定要绑定有效的内存单元,否则便是野指针,同样会造成一些严重后果。