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

@2019-04-09

【问题】

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

【分析】

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

【解决】

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

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

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

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

【结论】

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

猜你喜欢

转载自www.cnblogs.com/skullboyer/p/10677419.html