今日在测试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里面也有一部分代码有类似的错误…
比如这里: