esp_task_wdt_reset 传递的参数不是void吗?怎么还要传递任务句柄?怎么传递呢
时间: 2023-12-15 10:04:15 浏览: 34
是的,`esp_task_wdt_reset`函数的参数确实是`void`类型,它不需要接收任何参数。但是,它需要知道要重置哪个任务的任务监视器。因此,你需要将该任务的任务句柄作为参数传递给`esp_task_wdt_reset`函数,以便它能够找到并重置该任务的任务监视器。
在ESP-IDF中,可以使用xTaskGetCurrentTaskHandle()函数获取当前任务的任务句柄,然后将该句柄作为参数传递给`esp_task_wdt_reset`函数,如下所示:
```
#include "esp_task_wdt.h"
#include "freertos/task.h"
// 获取当前任务句柄
TaskHandle_t current_task_handle = xTaskGetCurrentTaskHandle();
// 重置当前任务的任务监视器
esp_task_wdt_reset(current_task_handle);
```
这样,`esp_task_wdt_reset`函数就能够找到并重置当前任务的任务监视器了。
相关问题
esp_task_wdt_reset(712): task not found
这个错误提示表明在调用 `esp_task_wdt_reset` 函数时,传入的参数并没有对应的任务。这个函数的参数是任务的句柄,需要在调用该函数时传入正确的句柄。
可能出现这个错误的原因有很多,比如传入的句柄为空、传入的句柄已经被删除或者已经超时等等。你可以在调用 `esp_task_wdt_add` 函数时保存任务的句柄,并在调用 `esp_task_wdt_reset` 函数时传入该句柄,以避免这个错误的发生。
如果你已经保存了任务的句柄但仍然出现这个错误,可能需要进一步分析代码或者调整任务的优先级等参数来解决问题。同时,你也可以在调用 `esp_task_wdt_reset` 函数之前先调用 `esp_task_wdt_delete` 函数来删除该任务的看门狗计时器,然后再重新添加看门狗计时器并重置计时器,以避免这个错误的发生。
esp_task_wdt_reset(783)
引用\[2\]中提到,esp_task_wdt_reset()是ESP32官方提供的一个API函数,用于重置任务的任务监视计时器(Task Watchdog Timer,TWDT)。每个订阅了TWDT的任务都需要定期调用此函数来避免TWDT计时器超时。如果任务没有在任务函数中重置TWDT,TWDT将会超时。如果空闲任务订阅了TWDT,它将在空闲钩子任务中自动重置TWDT。但是如果任务从未订阅TWDT或者TWDT没有初始化,调用此函数将返回错误信息。\[2\]
所以,esp_task_wdt_reset(783)是用于重置任务783的任务监视计时器的函数调用。
#### 引用[.reference_title]
- *1* *2* *3* [小智-学长esp32桌面小屏幕_DesktopScreenDemoV4.0.0_进入低功耗模式部分的代码学习](https://blog.csdn.net/MOS_JBET/article/details/128760159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]