【报错】assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

news2024/11/30 10:49:33

🌱 hi,最近开始写嵌入式,碰到蛮多新的问题,也调bug到凌晨五点过。欢迎关注我,一起讨论交流

开发环境

在VScode中使用Arduino,开发板ESP32S3

报错代码

使用队列接收服务器消息,FIFO依次处理消息

创建2个Task,1个用来通讯(连接wifi及mqtt服务器),1个用来控制电机等运作。前者xQueueSend(把来自服务器的消息放入队列),后者xQueueReceive(读取队列中消息)

xTaskCreatePinnedToCore(connect, "connect wifi and mqtt", 1024 * 8, NULL, 1, NULL, 0);

分析问题

1 直接搜索错误

其实在没创建Task前(只使用函数),代码是不报错的。加入xTaskCreate时候,仅vertify也没问题,upload就开始报错:

assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

然后百度和google了下,相似报错但不一样(也是wifi和queue同时用),它说可能是因为有WiFi的问题

还有一个freeRTOS社区的回答(找不到链接了),是22年底的一个对queue源码认为出错的回答,官方进行了讨论,并也认为提出的该部分源码有问题,可以被替代或删除

然后我有点怀疑是不是queue源码有问题。。后面事实是没问题的哈哈,有问题的是我的其他代码,一个地方出错就会连环报错,报一些不知道怎么解决,甚至不知道问题出在哪里的错误

2 代码调试

注释掉所有代码,从零开始调试,发现问题可能不在queue这,在xTaskCreate时候就开始报错:

Guru Meditation Error: Core 0 panic'ed (IllegalInstruction)
Guru Meditation Error: Core 0 panic'ed (LoadProhibited)
Guru Meditation Error: Core 0 panic'ed (Double exception)

这几个不知所云的错误,我调试了5个小时。。。

另外,关于这种错误(不显示出错代码行号),可以通过addr2line命令看下哪行报错

到build路径下: 

 
参考链接

3 问题解决

🌻 后来发现是xTaskCreate时候,栈设太小了。。。麻了。这是主要错误

然后又改动了我代码的其它两个地方

🌻 一个是xTaskCreate时传入的函数connect(void *ptParam),其既没有一次性执行后的vTaskDelete,其中也没有while循环反复检测连接状况(把这块放在了loop里)。这是不对的,一直报错

于是把持续检测代码用while放在了connect函数里,ok

🌻 另一个是使用vTaskDelay,喂狗。如果不喂的话会有watch dog报错,所以每个地方我都加了一下

解决了 Guru Meditation Error: Core 0 panic'ed (IllegalInstruction) 和 assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))问题,其实跟queue无关,是其它错误代码引起的一系列连锁反应,所以从零调试很重要啊。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

参考B站古月居ROS入门21讲: 参数的使用与编程方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、概念图讲解二、创建功能包三、参数命令行的使用方法:rosparam显示某个参数值:rosparam get设定某个参数值:rosparam set将…

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls(查看目录)pwds(显示用户当前所在目录)cd(改变工作目录)mkdir(创建目录)rmdir(删除目录)touch (新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站,不写名字了,写了老是不能通过。 获取视频的弹幕文件(xml),并生成如图…

认真分享一个让我变厉害的小建议

很多朋友,加我好友之后,第一句话通常是:我想提高英语,有什么资料推荐? 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多,我就说个最俗的目的吧,为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…

win系统重装系统后提示 BitLocker(磁盘加密)密钥查找及如何关闭

文章目录前言如何找到恢复秘钥&#xff0c;解锁磁盘1、打开链接&#xff1a;[https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key](https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key)2…

Nuxt3+ElementPlus构建打包部署手记

文章目录为何选Nuxt.js?工程package.json参考目录结构页面之间的关系几个主要命令动态组件获取后台数据SSR打包方式部署参考文档为何选Nuxt.js? 在前后端分离出现之前&#xff0c;传统的web页面都是服务端渲染的&#xff0c;如JSP、PHP、Python Django&#xff0c;还有各种模…

06【Filter】

文章目录06【Filter】一、过滤器简介1.1 Filter概述1.2 Filter的使用1.2.1 Filter快速体验1.2.2 XML配置Filter1.2.3 Filter的拦截规则1.3 Filter的生命周期1.3.1 Filter生命周期介绍1.3.2 Filter生命周期相关方法1.3.3 FilterConfig类1.4 Filter的拦截方式1.4.1 REQUEST1.4.2 …

Linux系统编程——管道

文章目录一、管道1.管道的特质2.管道的用法——pipe函数3.管道的读写行为4..管道的优劣二.实战练习&#xff1a;实现ls | wc -l 指令三、fifo实现非血缘关系进程间通信一、管道 1.管道的特质 实现原理: 内核借助环形队列机制&#xff0c;使用内核缓冲区实现。 特质: 1.伪文件…

接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock

一、应用背景因为本章的内容是使用jq工具配合完成&#xff0c;因此在开始部分会先花一定的篇幅介绍jq机器使用&#xff0c;如果读者已经熟悉jq&#xff0c;可以直接跳过这部分。先来看应用场景&#xff0c;App 经常会有一些信息展示的列表页&#xff0c;比如商家的菜品、股票的…

真无线蓝牙耳机怎么选?分体式蓝牙耳机选购攻略及推荐

近年来&#xff0c;随着智能手机终端市场的崛起&#xff0c;无线蓝牙耳机的产销也随之呈持续增长的态势。真无线蓝牙耳机凭借其时尚、便捷性&#xff0c;迅速成为年轻人出门必备的数码单品之一。蓝牙耳机经过多年发展&#xff0c;其产品种类、品牌型号数不胜数。导致&#xff0…

springboot监听器的使用(ApplicationListener、SmartApplicationListener、@EventListener)

目录前言1. ApplicationListener1. 简单的全局监听2. 定时任务3. 监听自定义事件2. SmartApplicationListener1. 简单使用2. 方法介绍3. EventListener前言 监听器&#xff1a; 当某个事件触发的时候&#xff0c;就会执行的方法块。 springboot提供了两个接口来实现监听&…

Paddle进阶实战系列(一):保险文本视觉认知问答

保险文本视觉认知问答 1.项目介绍 1.1背景 随着人工智能技术的逐渐成熟&#xff0c;计算机视觉、语音、自然语言处理等技术在金融行业的应用从广度和深度上都在加速&#xff0c;这不仅降低了金融机构的运营和风险成本&#xff0c;而且有助于提升客户的满意度&#xff0c;比如…

Rhec第二次作业

两台机器&#xff1a;第一台机器作为客户端&#xff0c;第二台机器作为服务器&#xff0c;在第一台使用rhce用户免密登录第二台机器准备两台虚拟机并保证可以ping通网络&#xff0c;ip地址不一样第一台机器配置创建rhce用户在rhce用户上&#xff0c;创建密钥对并将公钥发送给第…