@2019-04-09
【问题】
控制程序工作一段时间异常重启
【分析】
经定位分析重启原因为看门狗复位导致
【解决】
经排查发现在中断服务函数中使用了FreeRTOS的系统时延函数vTaskDelay,调试发现进入vTaskDelay函数后,会在函数xTaskResumeAll中进入临界段函数,
进而发现程序会卡死在下面代码处:
if ( uxCriticalNesting == )
{
configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == );
}
上边代码表示发生一次嵌套调用时,会断言检查是否是中断调用,因为vTaskDelay不支持中断调用,所以结果就会死在此断言语句处
【结论】
中断函数中要避免使用时延函数,更不能使用系统时延函数