在中斷服務函數中使用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不支持中斷調用,所以結果就會死在此斷言語句處

【結論】

  中斷函數中要避免使用時延函數,更不能使用系統時延函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM