【FreeRTOS】在中断服务函数中使用系统延时函数vTaskDelay导致看门狗复位

【问题】

  控制程序工作一段时间异常重启

【分析】

  经定位分析重启原因为看门狗复位导致

【解决】

  经排查发现在中断服务函数中使用了FreeRTOS的系统时延函数vTaskDelay,调试发现进入vTaskDelay函数后,会在函数xTaskResumeAll中进入临界段函数,

进而发现程序会卡死在下面代码处:

1 if ( uxCriticalNesting == 1)
2 {
3     configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );  
4 }

  上边代码表示发生一次嵌套调用时,会断言检查是否是中断调用,因为vTaskDelay不支持中断调用,所以结果就会死在此断言语句处

【结论】

  中断函数中要避免使用时延函数,更不能使用系统时延函数

posted @   壹点灵异  阅读(4764)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示