【ESP32填坑日记】问题篇⑨ 队列阻塞导致定时器不执行的coredump
关注+星标公众号,不错过精彩内容
作者 | 量子君
微信公众号 | 极客工作室
【ESP32填坑日记】问题篇专栏目录
【ESP32填坑日记】问题篇① ESP32测试 WiFi性能、BLE定频
【ESP32填坑日记】问题篇② ESP32主从一体机
【ESP32填坑日记】问题篇③ ESP32改用改成Nimble库
【ESP32填坑日记】问题篇④ ESP32出现数据拥塞
【ESP32填坑日记】问题篇⑤ ESP32主从一体下的MTU协商问题
【ESP32填坑日记】问题篇⑥ ESP32-C3低功耗问题
【ESP32填坑日记】问题篇⑦ 使用ESP32电源管理功能时遇见的几个常见问题及思考
【ESP32填坑日记】问题篇⑧ VScode中提示无法使用compilerPath解析配置:“C:/xxx/xtensa-esp32-elf-gcc.exe“
【ESP32填坑日记】问题篇⑨ 队列阻塞导致定时器不执行的coredump
前言
本专栏包含大量的ESP32开发教程、实例以及经验分享,详细的讲述了怎样配置ESP32,怎样使用ESP32,以及在实际开发过程中遇到的问题及解决方案等。每一篇“填坑“文章都会具体到某一问题,例如电源问题、焊接问题、编程问题等,这样设计的目的就是为了让每一位读者都能找到自己需要的解答。
本章介绍了队列阻塞导致定时器不执行的coredump的具体原因分析。
一、问题描述
使用的5.05的库,原因是sdk库里最里层有个消息队列阻塞导致的,不确定是什么原因导致队列阻塞的。因为是通过线程判断定时器不执行直接assert的方式让esp32重启才抓到的这个问题,所以本案例中不关注死机原因是assert的问题,主要还是查看底层的消息队列阻塞的原因。
二、问题分析
esp_timer里面是禁止使用堵塞函数的,这个ESP32的WiFi和蓝牙都在用,如果对时间要求不是特别高,建议使用FreeRTOS Timer!!不管在esp_timer里多少秒调用一次,esp_timer都不能调用涉及block的操作。
另外, esp_ble_gatts_set_attr_value这个接口最终是通过queue send的,所以会有block的操作。大多数情况下,应该不会堵塞,但是如果极端环境下queue正好满了 这里就会Block,导致整个系统卡住。比如在蓝牙建立连接的过程中,建立连接等各个阶段都需要queue操作,所以此时很容易发生这个问题。
总结
本章介绍了队列阻塞导致定时器不执行的coredump的具体原因分析,应用层非常不建议使用esp_timer。建议使用FreeRTOS Timer!!
关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!