记录学习ESP-IDF过程中出现的一些问题以及配置修改。
- 使用taskENTER_CRITICAL()和taskEXIT_CRITICAL()进入临界区时编译器提示需要参数,并且build会失败,点击函数跳转时出现两个task文件,一个需要参数,另一个不需要参数,发现FreeRTOS有两个内核文件夹,ESP32是多核,建议使用SMP版本的FreeRTOS
Component config > FreeRTOS > Kernal
勾选 Run the Amazon SMP FreeRTOS kernel instead (FEATURE UNDER DEVELOPMENT)
- 在使用临界区保障代码运行不被打断时,触发Backtrace严重错误,特征为打印 CPU 寄存器,然后重启,经测试后发现是超时使用临界区导致watch dog出错。
1.调整watch dog timeout时间
Component config > ESP System Settings > Trace memory > Panic handler behaviour
选择为Print registers and halt(打印寄存器后暂停,避免关键任务出错导致循环重启)
Component config > ESP System Settings > Trace memory > Interrupt watchdog timeout (ms)
调整该项数值,设置为大于临界区代码执行的时间(非必要不修改)
2.避免在临界区代码内使用printf()等耗时长的函数,避免操作IO。