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。

图1 adc_set_init_code实现
图2 adc1_get_raw实现

 在进入“ADC_ENTER_CRITCAL”执行之后,“ADC_EXIT_CRITCAL”执行之前,不能有任何日志输出,否则将触发abort()

解决

将“adc_set_init_code”里面的日志输出语句注释即可。

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部