【ESP32填坑日记】问题篇⑨ 队列阻塞导致定时器不执行的coredump

2024-01-07 18:14:22

关注+星标公众号,不错过精彩内容
在这里插入图片描述
作者 | 量子君
微信公众号 | 极客工作室


【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”查看更多内容。

文章来源:https://blog.csdn.net/weixin_42037809/article/details/135424291
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。