OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4808|回复: 4

关于信号量一个找了几天的bug,无奈求助大家

[复制链接]

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
发表于 2023-4-11 19:31:46 | 显示全部楼层 |阅读模式
问题是这样,嵌入式底层采集数据,采集完成之后估计有几兆的文件文件,底层搭建了MQTT以及http服务,同时使用了RT_THREAD的AT组件,最摸不着头脑的问题在于,正常情况下推送消息给服务器是没问题,推送的时候会获取信号量,推送成功会调用推送成功的回调函数释放信号量,这些基本情况的介绍,现在问题是完成数据采集之后,因为信号问题,文件推送超时(超时时间90秒),然后会把推送结果通过mqtt推送给服务器,这个时候问题是看似推送成功了,但是没有,因为没有调用推送成功的回调函数,然后后面的程序就因为这里没有释放信号量而被阻塞。但是同样的地方如果推送成功,并不会出现这种信号量的阻塞,这个BUG估计有些困难,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-4-12 09:10:34 | 显示全部楼层
你当然不能依赖推送成功作为唯一条件释放信号量。最起码的是超时释放得有。无论推送是否成功,不能阻塞后续的任务。
回复 支持 反对

使用道具 举报

70

主题

6756

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12979
金钱
12979
注册时间
2012-11-26
在线时间
3786 小时
发表于 2023-4-12 09:34:02 | 显示全部楼层
c2007s 发表于 2023-4-12 09:10
你当然不能依赖推送成功作为唯一条件释放信号量。最起码的是超时释放得有。无论推送是否成功,不能阻塞后续 ...

说得对   楼主自己都没搞清楚,就在那喊bug bug的   自己用的方法有问题
学无止境
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
 楼主| 发表于 2023-5-16 11:32:42 | 显示全部楼层
c2007s 发表于 2023-4-12 09:10
你当然不能依赖推送成功作为唯一条件释放信号量。最起码的是超时释放得有。无论推送是否成功,不能阻塞后续 ...

这个问题,我确实不知道是什么原因导致的,但是这个代码是从STM32移植到GD32之后才出现的问题,我觉得唯一能扯上关系的就是GD32的代码运行速度更快一些,基于这个角度我在AT组件里面加一个延时,这个问题就被处理了
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
 楼主| 发表于 2023-7-17 15:44:49 | 显示全部楼层
15284083060 发表于 2023-5-16 11:32
这个问题,我确实不知道是什么原因导致的,但是这个代码是从STM32移植到GD32之后才出现的问题,我觉得唯 ...

时隔三个月,再次回复这个问题,加延时确实规避这个问题,但不是问题的本质,先说前提,接收这个项目之后发现之前开发把任务优先级弄反了,该设置成最高的是最低,反之亦然,然后有一个存在弊病的任务就是LED的任务,这个任务的优先级最高,而且切换的时候是在临界区里面,就是这个临界区导致了很多问题,这个信号量所在的任务,优先级为5,会被抢占,所以在任务运行的过程中,失败会尝试发送三次,第二次不会释放信号量,第三次失败之后会释放信号量,等于第二次就是一个真空期,然后刚好在第二次尝试推送,接收的时候被抢占,进入临界区,然后中断就被延时,接收不到应该接收的错误回复,于是就卡死了,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 08:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表