esp-idf填坑记:ADC读取导致Abort
近日使用esp32s2进行开发。发现设备反复重启,现将解决过程记录如下。
前事之不忘,后世之师!
现象
发现设备反复重启,通过串口日志发现,在ADC读取的时候,触发了abort。
软件环境:
esp-idf: v4.2.1
调试
编译运行esp-idf自带ADC示例,发现现象一致。如果日志级别设置为info,则不会出现abort;如果设置为debug, 则必然出现。
利用设备abort时输出的“Backtrace”信息,发现是在调用“adc1_get_raw”之后触发abort。
通过网上检索,发现有人提过类似问题。参考:Debug logging from adc_set_init_code (on main thread) causing an abort because it thinks it calls from an ISR (IDFGH-4233) · Issue #6091 · espressif/esp-idf (github.com)
出现故障原因是esp-idf在“adc_set_init_code”里面有一个debug级别的日志输出。当芯片为esp32s2且开启了debug日志的时候,将会导致abort。
在进入“ADC_ENTER_CRITCAL”执行之后,“ADC_EXIT_CRITCAL”执行之前,不能有任何日志输出,否则将触发abort()
解决
将“adc_set_init_code”里面的日志输出语句注释即可。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
