器件型号: CC3230SF
以下是与看门狗相关的任务和函数:
void watchdogCallback(uintptr_t watchdogHandle) {
UART_PRINT("WATCHDOG RESET!!!\n");
}
void initWatchdog(void) {
Watchdog_Params params;
Watchdog_Params_init(¶ms);
params.callbackFxn = NULL;
params.debugStallMode = Watchdog_DEBUG_STALL_OFF;
params.resetMode = Watchdog_RESET_ON;
watchdogHandle = Watchdog_open(CONFIG_WATCHDOG_0, ¶ms);
if (watchdogHandle == NULL) {
UART_PRINT("Error opening Watchdog\n");
while (1);
}
uint32_t reloadValue = Watchdog_convertMsToTicks(watchdogHandle, 12000);
if (reloadValue != 0) {
Watchdog_setReload(watchdogHandle, reloadValue);
}
}
void watchdogTask(void *pvParameters) {
(void)pvParameters;
while (1) {
vTaskDelay(pdMS_TO_TICKS(4000));
Watchdog_clear(watchdogHandle);
UART_PRINT("Watchdog fed!\n");
}
}
以下是在主线程中创建看门狗任务的位置(几乎在线程的开头):
void mainThread(void *pvParameters)
{
.
.
.
// Creating a task for Watchdog
if (xTaskCreate(watchdogTask, "WatchdogTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 8, NULL) != pdPASS) {
UART_PRINT("Failed to create watchdog task\n");
while (1);
} else {
UART_PRINT("Watchdog task created\n");
}
.
.
.
为了测试看门狗复位的实现情况、我尝试了以下方法:
void vMainTask(void *pvParameters) {
UART_PRINT("STUCK IN WHILE LOOP");
while (1)
UART_PRINT(".");
.
.
.
我也尝试过 sleep () 来获得一个较大的延迟。
这是我获得的控制台输出:

我还尝试了提供看门狗:
- 最低优先级 — 则只打印“.........."</s>“ “(在循环期间卡在 vMainTask 中)、即使没有狗被“馈送“、系统也不会复位。
- 最高优先级 — 然后仅打印“Watchdog Feed!“ (如上面的控制台片段中所示“;狗不断被喂食。
即使系统卡在上述情况下、系统也不会复位。
欢迎就此问题提供任何帮助、并提前感谢!
