@2019-04-09

【问题】

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

【分析】

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

【解决】

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

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

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

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

【结论】

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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄