【嵌入式】ESP32几个反复重启的bug记录

这篇具有很好参考价值的文章主要介绍了【嵌入式】ESP32几个反复重启的bug记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在使用ESP32开发一些无线应用,在经历重重困难能够顺利编译-下载工程后,尝试把STM32中的程序移植到ESP32中,但由于对FreeRTOS系统了解不够深入,所以遇到了很多导致板子一直Rebooting的bug,在此记录一下。

1. 消息队列溢出

在创建一个消息队列时需要给出队列长度,同时也需要相应的读取队列信息。如果入队过多没读完就满了,队列溢出则会导致系统重启。

所以在使用消息队列时注意消息写入与读取的对应关系。

2. 中断程序卡死 看门狗异常

在程序中使用到了一个timer中断,刚写完发现一直重启,报错的原因是看门狗溢出,也就是高优先级线程卡死太久了。后来debug发现是卡死在timer中断内了。卡死的具体原因见我之前写的一个小总结:STM32-中断卡死 - CHER-YOUNG BLOG

在ESP32-FreeRTOS系统中封装了太多层,直接去改中断标志位寄存器的值没有开放API,不过可以随意调用一个更改中断位的函数完成。

这点后来查阅官方文档,也有相应的说明:

定时器启动后,可动态产生特定事件(如“警报事件”)。如需在事件发生时调用某些函数,请通过 gptimer_register_event_callbacks() 将函数挂载到中断服务例程 (ISR)。gptimer_event_callbacks_t 中列出了所有支持的事件回调函数:

  • gptimer_event_callbacks_t::on_alarm 设置警报事件的回调函数。由于此函数在 ISR 上下文中调用,必须确保该函数不会试图阻塞(例如,确保仅从函数内调用具有 ISR 后缀的 FreeRTOS API)。函数原型在 gptimer_alarm_cb_t 中有所声明。

例如 xQueueSendFromISR、timer_group_get_counter_value_in_isr

3. printf重入

由于之前写裸机程序习惯了,没想到有一天会因为printf卡死。

具体的场景是:中断A和B同时调用了printf,然后系统就很重启。printf不能在未返回的时候再次被调用。所以在中断中尽量不要用printf发送调试信息,应该改用ESP_LOG,日志输出。

详情见:Logging library 

大致就是以下几个API:

  • ESP_LOGE -error
  • ESP_LOGW -wornning
  • ESP_LOGI -information
  • ESP_LOGD -debug
  • ESP_LOGV -verbose

4. 指针导致的内存错误

在程序中需要用到结构体指针、函数指针等稍微复杂一些的指针操作时,注意指向对象前先给对象分配内存空间,不然找不到地址就会报错重启。

5. 参数异常

某些API参数设置没有保护或异常判断,输入参数溢出可能会导致错误。例如在设置定时器alarm周期时需要根据命令内容来设置,这时需要手动检测这个周期>=0,否则会导致重启。文章来源地址https://www.toymoban.com/news/detail-402555.html

到了这里,关于【嵌入式】ESP32几个反复重启的bug记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯电子类嵌入式(STM32G431)备赛学习记录(一)——LED

    2023年2月10日,距离第十四届蓝桥杯正式比赛还有不到两个月的样子,从今天开始正式备赛。之前博主有看过野火的教程,学的是STM32F103。蓝桥杯嵌入式组现在用的是STM32G431,板子在二手平台上买的,视频参考b站up主01Studio相关教程(后面提到简写为教程)。学习的模块按照教

    2024年01月25日
    浏览(47)
  • 嵌入式软件调试与验证4自动重现和分析嵌入式软件中的Bug

    嵌入式软件的重要性逐年增加。ISO26262标准的最高安全级别要求十个9小时内无故障运行。然而,历史上的一些项目表明,即使进行了全面的测试,多年来仍有许多错误未被发现。航天飞机的控制计算机仅有50万行源代码,却经过了长达8年的测试,每行源代码耗资1000美元,即总

    2024年02月08日
    浏览(41)
  • 嵌入式软件中如何排查bug?

    明确Bug现象: 要准确描述Bug出现的场景、现象,能复现就最好。 查看日志信息: 嵌入式系统日志可以帮助定位问题,看是否有报错、异常信息。 用仿真工具调试: 许多嵌入式芯片都有相应的仿真调试工具,可以在仿真环境下单步跟踪、查看变量值等。 加打印调试: 在代码关键

    2024年02月10日
    浏览(31)
  • 嵌入式中详解 ARM 几个常见的寄存器方法

    大家好,今天来聊聊对于ARM几个特殊寄存器的理解,FP、SP和LR。 1、介绍 FP:栈顶指针,指向一个栈帧的顶部,当函数发生跳转时,会记录当时的栈的起始位置。 SP:栈指针(也称为栈底指针),指向栈当前的位置, LR:链接寄存器,保存函数返回的地址。 关于gcc就有一个关

    2024年02月20日
    浏览(31)
  • 嵌入式网络基础——ESP8266的介绍和使用

    学嵌入式,推荐各位好友们上百问网。 IP地址:一个32位的主机唯一标识 IP地址分为公有IP和私有IP 端口号的范围:0 ~ 65535(0~ 1023为系统保留) 网络通信的基础:IP地址+端口号 端口就是数据传输给每个应用的通道。不同的端口对应不同的应用 TCP:可靠传输协议,常用于会议,

    2024年02月04日
    浏览(39)
  • 使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

    以M5AtomS3为例,博客撰写效率提升10倍以上: 0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客 1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客 2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客 3. M5ATOMS3基础03给ROS1发一个问候(rosserial)_zhangrelay的博客-CSDN博客 4. M5ATOMS3基

    2024年02月14日
    浏览(37)
  • 嵌入式音频知识点记录

    音频存储 PCM PCM是英文“Pulse Code Modulation”的缩写,中文意为“脉冲编码调制”。它是一种数字信号处理技术,用于将模拟信号转换为数字信号,常用于音频编码和传输 音频参数 采样率 采样率:是指每秒电信号采集数据的频率,常见的音频采样率有8000HZ,16000HZ,44100HZ,48000HZ,96

    2024年04月09日
    浏览(32)
  • 嵌入式硬件介绍(一)|ESP8266 Wi-Fi 模块介绍(以ESP8266 -12F为例)

          本文主要讲解安信可ESP8266 WiFi模块的类型及功能,安信可ESP8266 WiFi模块是一款基于乐鑫ESP8266EX的超低功耗UART-WiFi模块。这类模块集成了业界领先的Tensilica L106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支持RTOS,板载天线等。支持标准的 IEEE802.11 b/g

    2024年04月11日
    浏览(32)
  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(68)
  • 嵌入式系统课程设计——温度记录仪

    课程设计目录 一、嵌入式系统基础实验  二、项目需求分析 三、实验方案设计 四、实验程序设计  五、成本核算情况 八、完成情况与问题分析 九、学习心得 一、嵌入式系统基础实验 1.1实验平台的使用 图1 建立新工程图片 图2 选择lpc1114芯片图片 图3 选择头文件图片 图4 编

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包