打印
[STM32L4]

freertos任务间通信问题

[复制链接]
949|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzaiy|  楼主 | 2022-4-11 23:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用HAL库自带的freertos例程里面修改的程序,建立两个任务一个是使用osSignalSet设置信号,另外一个使用osSignalWait等待信号,等任务运行后,发现发送了4000个信号,但是接受却是接收到了3998个信号,丢了2个,大神知道可能是什么导致的吗?

使用特权

评论回复
沙发
xxrs| | 2022-4-11 23:49 | 只看该作者
有没有可能被竞争挤掉了

使用特权

评论回复
板凳
zhenykun| | 2022-4-11 23:51 | 只看该作者
处理的线程过长?

使用特权

评论回复
地板
juventus9554| | 2022-4-11 23:54 | 只看该作者
同一片芯片同时做接收和发送?

使用特权

评论回复
5
pengf| | 2022-4-11 23:57 | 只看该作者
中间有没有延时啥的等待机制或者重发机制

使用特权

评论回复
6
xxmmi| | 2022-4-11 23:58 | 只看该作者
是否堵塞了

使用特权

评论回复
7
yangxiaor520| | 2022-4-12 08:07 | 只看该作者
信号丢失

使用特权

评论回复
8
caoenq| | 2022-4-12 08:53 | 只看该作者
这个很正常

使用特权

评论回复
9
豌豆爹| | 2022-4-12 16:37 | 只看该作者
是不是处理的线程太长了

使用特权

评论回复
10
liuzaiy|  楼主 | 2022-4-12 21:43 | 只看该作者
事情是这样的,是同一个芯片上运行的两个任务,任务A是从SPI读取数据,放到数组中,每隔18ms读取一次,累计读取完成12次后发送信号给任务B,任务B收到信号后负责吧数据写入SD卡,完后就完了,依次执行4000次,发现接收到的信号只有3998次。没有信号重发机制,请问信号重发机制怎么实现?有介绍吗?

使用特权

评论回复
11
pengf| | 2022-4-12 21:45 | 只看该作者
两个任务的优先级如何?SD卡读写应该会比较长但次数少,优先级可以高一些。如果数据需要都记录,建议使用queue,这样应该不会出现丢记录了

使用特权

评论回复
12
wuhany| | 2022-4-12 21:49 | 只看该作者
通过返回值来调试

使用特权

评论回复
13
liuzaiy|  楼主 | 2022-4-12 21:51 | 只看该作者
能具体说说返回值调试时怎么个意思吗?我在任务A发送通知的地方加了个计数变量,发送一次就计数加一次,在任务B接收通知的地方加了个计数变量,接收到通知计数加一,任务接收后统计两个计数值发现发送计数是4000,接收计数是3998.

使用特权

评论回复
14
liuzaiy|  楼主 | 2022-4-12 21:53 | 只看该作者
任务A是读取数据,是要求硬实时的,就是来了数据必须读取否则就会漏数据,数据要求都记录。所以任务A设置的是osPriorityRealtime,实时优先级,优先级最高。任务B是读取的数据写入到SD卡上,这个任务是高优先级osPriorityHigh,仅次于实时优先级(我使用的是HAL自带的Freertos,就是CMSIS-RTOS对freertos的封装。)

使用特权

评论回复
15
zwll| | 2022-4-12 21:55 | 只看该作者

每次都发送成功?没法送成功就重发啊

使用特权

评论回复
16
llljh| | 2022-4-12 21:57 | 只看该作者
你用哪个版本的HAL,我觉得函数不一样啊

使用特权

评论回复
17
dengdc| | 2022-4-12 21:59 | 只看该作者
说丢了其实也不太合适,就是说任务B执行的不够快,所以导致在某个时间段,任务A调用了osSignalSet多次

使用特权

评论回复
18
llljh| | 2022-4-12 22:01 | 只看该作者
后续的set客观上没有效果,因为signal已经设置了

使用特权

评论回复
19
llljh| | 2022-4-12 22:03 | 只看该作者
但是任务B只获取到一次signal,最终的结果是任务B得到了signal并执行对应操作。

使用特权

评论回复
20
heweibig| | 2022-4-12 22:05 | 只看该作者

如果任务B能够在这次调度中把任务A多次的signal产生的数据全部都获取,那最终程序也不会有问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

735

主题

7546

帖子

2

粉丝