中级会员
 
- 积分
- 375
- 金钱
- 375
- 注册时间
- 2016-6-11
- 在线时间
- 82 小时
|
20金钱
最近处理一个项目里程序假死的问题,平台使用的是STM32F407+ucos+lwip1.4.1+CAN收发。问题现象是:偶发出现(比较难复现)程序假死情况,串口不打印,网口数据也不收发,整个程序卡死一样。但过一段时间会自动恢复正常,这段时间为几十秒到几分钟不等。
另外,lwip里用的是NETCONN UDP通讯,底层部分移植了原子的代码。
而网口中断ETH_IRQHandler程序如下:
void ETH_IRQHandler(void)
{
OSIntEnter();
while(ETH_CheckFrameReceived())
{
LwIP_Pkt_Handle();
}
ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
OSIntExit();
}
该中断的抢占优先级是1,而CAN的接收抢占优先级是0.
目前有两个猜测:
1.可能是lwip1.4.1自身的问题,在ETH_IRQHandler()中断里卡死了;
2.可能是CAN接收数据量大,频繁进中断导致ETH_IRQHandler()中断存在延迟,而后卡死。
但是还没定位到是哪里,也比较难复现,想请教论坛里的大佬帮忙看看是怎么回事,感谢!
|
|