今日在測試ESP32代碼的時候,使用xTaskNotify發生錯誤,提示如下:
(xTaskNotify)- assert failed!
,然後系統重啓。
找了一下原因,在xTaskNotify()
之前先打印對應的task_handle
,結果是NULL。
if(target_task_handle != NULL){
xTaskNotify((TaskHandle_t )target_task_handle, //接收任務通知的任務句柄
(uint32_t )bit_lock_onoff,
(eNotifyAction )eSetBits);
}else{
ESP_LOGI("xTaskNotify","NULL pointer");
}
然後找到創建任務的代碼,發現最後一個參數使用了target_task_handle
。編譯和運行不會報錯,但是使用target_task_handle
向任務傳遞消息的時候就不行了。原因是xTaskCreate
的handle參數應該使用地址&target_task_handle
。修改後問題解決。
ps: esp-idf裏面也有一部分代碼有類似的錯誤…
比如這裏: