板子接上路由器后反复重启调试记录
背景:STM32F207 freeRTOS lwip(socket编程方式)
现象:板子RJ45接口不接路由器时能正常使用,接上路由器之后,每运行一段时间就重启一次。
调试:
首先发现造成重启的原因是,喂狗函数放在网络任务(优先级为倒数第二)中,网络任务阻塞不能喂狗导致看门狗触发。
在网络任务中寻找阻塞位置,发现socket函数返回0,在connect -> lwip_connect -> netconn_connect 中阻塞。调试信息显示为:
更改使用RAW编程方式,则网络任务不会阻塞,程序也不会重启。调试信息如下:
可以看到有明显区别是:socket编程方式中出现两次processing active pcb才出现一次polling application。(没有时间深究原因…)
解决:
目前解决办法是使用RAW编程代替socket编程。
另:将看门狗放在优先级最低的任务中,程序能正常运行不重启,且网络任务阻塞时长到一定程度之后又可以继续运行,可见其原因是网络任务阻塞时间大于看门狗设定时间,而不是网络任务死掉了。