乐鑫技术交流
直播中

艾玛

11年用户 736经验值
擅长:模拟技术 EDA/IC设计 RF/无线
私信 关注
[问答]

esp32定时读取AD芯片值并通过蓝牙发送触发看门狗,看门狗会出现复位的情况怎么解决?

您好,我使用一块esp32通过SPI以软件定时器的方式读取外部AD芯片的值,并通过ble用esp_ble_gatts_send_indicate函数发送给另一块esp32,当我设置esp_timer_start_periodic(timer1, 1000);即任务周期是1ms的时候会出现看门狗复位问题(周期2ms都是正常的):

(69249) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:[0m
[0;31mE (69249) task_wdt:  - IDLE (CPU 1)[0m
[0;31mE (69249) task_wdt: Tasks currently running:[0m
[0;31mE (69249) task_wdt: CPU 0: IDLE[0m
[0;31mE (69249) task_wdt: CPU 1: BTC_TASK[0m
[0;31mE (69249) task_wdt: Print CPU 0 (current core) backtrace[0m


Backtrace:0x401162EE:0x3FFBE7400x40082CCD:0x3FFBE760 0x4012CD2F:0x3FFBD490 0x400D2B5F:0x3FFBD4B0 0x4009232D:0x3FFBD4D0 0x400938E9:0x3FFBD4F0

[0;31mE (69249) task_wdt: Print CPU 1 backtrace[0m


Backtrace:0x4008C319:0x3FFBED400x40082CCD:0x3FFBED60 0x400D4321:0x3FFC8230 0x400D4AB9:0x3FFC8260 0x400D39DF:0x3FFC8280 0x400D3593:0x3FFC82A0 0x4000BD83:0x3FFC82C0 0x4000117D:0x3FFC82E0 0x400592FE:0x3FFC8300 0x4005937A:0x3FFC8320 0x40058BBF:0x3FFC8340 0x4012A37F:0x3FFC8370 0x40125CA7:0x3FFC8390 0x40125E25:0x3FFC86A0 0x4012DAAD:0x3FFC86D0 0x40095CAD:0x3FFC8700 0x40116BD3:0x3FFC8750 0x400D6814:0x3FFC87D0 0x400D6B76:0x3FFC8800 0x400D66B7:0x3FFC8840 0x400D9E85:0x3FFC8870 0x400E89DE:0x3FFC88B0 0x400E9BA0:0x3FFC88D0 0x400938E9:0x3FFC88F0

请问这个问题应该怎么解决呢?
                                                                                                                                                                             

回帖(1)

硕达科讯

2024-6-14 16:18:43
以下是一些建议来解决这个问题:

1. 确保在任务中定期重置看门狗定时器。您可以使用`esp_task_wdt_reset()`函数来实现这一点。在您的任务周期内,确保在适当的位置调用此函数。

```c
void app_main() {
    esp_task_wdt_reset(); // 在任务开始时重置看门狗定时器
    // 其他初始化代码...

    while (1) {
        // 任务代码...
        esp_task_wdt_reset(); // 在任务周期内定期重置看门狗定时器
    }
}
```

2. 调整看门狗定时器的超时时间。如果您的任务确实需要较长的时间来完成,您可以增加看门狗定时器的超时时间。在`menuconfig`中,选择`Component config` > `esp32 specific` > `Task Watchdog`,然后调整`Timeout`的值。

3. 检查任务的优先级。确保您的任务具有适当的优先级,以便在必要时获得CPU时间。在`menuconfig`中,选择`Task priority`来设置任务优先级。

4. 优化代码。检查您的代码,看看是否有任何可以优化的地方,以减少任务的执行时间。例如,减少循环次数、使用更高效的算法等。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分