项目里面使用了中断,包括10ms一次的定时器中断,两个uart的接收中断,其中定时器中断每次会进行按键扫描。
故障现象是,在按键时有较大概率(大于5%)会出现无任何响应的情况,加入看门狗后,会导致重启,很像程序跑飞。
经过反复测试,某次debug调试时,当发现疑似程序跑飞时,停止运行。发现程序运行在delay函数里面。
void delay_ms(u32 ms)
{
unsigned int fui_j;
for(;ms > 0;ms--) {
for(fui_j = 1596;fui_j > 0;fui_j --){
;
}
}
}
查看ms变量为0xFFFFFF31。
全工程搜索了一下,只有一处是在运行阶段调用了,其它都是在启动配置阶段调用。
调用语句是delay_ms(100);当时写这句是为了屏幕显示,防止多过数据刷屏。
猜测是某种原因导致了ms这个参数的内存被修改了。越过了0这个值。
具体原因等后面有时间了再分析一下。
第一次发文章,就是记录一下这次的问题。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_37453172/article/details/138561020
|