发新帖我要提问
12
返回列表
打印
[STM32L4]

freertos任务间通信问题

[复制链接]
楼主: liuzaiy
手机看帖
扫描二维码
随时随地手机跟帖
21
zhanghqi| | 2022-4-12 22:06 | 只看该作者 回帖奖励 |倒序浏览
但是如果任务B的延迟导致任务A的数据被覆盖,那就出问题了。

使用特权

评论回复
22
yinxiangh| | 2022-4-12 22:09 | 只看该作者
使用计数信号量,把que加大点

使用特权

评论回复
23
ousj| | 2022-4-12 22:10 | 只看该作者
信号间通讯是操作系统内部机制,如果连自己的通讯都保证不了,还用什么操作系统,不和裸奔一样么?????

使用特权

评论回复
24
morrisk| | 2022-4-12 22:12 | 只看该作者
不清楚,一次我用串口发送,也总是丢失前两个,不知道啥情况,后来莫名其妙好了

使用特权

评论回复
25
zyf部长| | 2022-4-12 22:15 | 只看该作者

判断返回值是否成功,失败是什么原因
有时你是发了,但是可能会失败的

使用特权

评论回复
26
liuzaiy|  楼主 | 2022-4-12 22:17 | 只看该作者
从大家的思路中想到了可能是接收通知的任务是写SD卡的任务,考虑到可能写卡没有及时完成导致错过了通知或者导致的数据覆盖。但是查看了下数据,仔细分析了下如果是SD卡写入没有完成,应该有很多数据覆盖啊,就猜测可能是某个时段导致写卡容易出问题,所以修改了下代码,是采集的数据如果不能被一个扇区512字节整除的话,就调整缓存大小是的缓存大小是512的整数倍+尽量小的多余字节。经过修改代码后测试了几次发现没有继续出现数据覆盖的问题。因此怀疑有可能是这个地方的问题,不知道各位对于FatFs是否有很熟悉的,SD卡按照512字节的扇区写入和不按照扇区写入效率差很多吗?

使用特权

评论回复
27
zhanghqi| | 2022-4-12 22:22 | 只看该作者
按扇区写入,如果写不满的地方,不知道用不用填充无效字符。

使用特权

评论回复
28
liuzaiy|  楼主 | 2022-4-12 22:26 | 只看该作者
我使用的是FatFs使用fwrite写都是随意写的也没问题,但是好像具体深究写入函数的实现都是按照扇区写入。比如你要写入1000个字节,前512按照扇区写入,后面的应该是单个写的,好像这样写入的效率相当低,我现在是把数据凑成512的整数倍再写入,这样效率确实会高但是没有具体统计时间。如果不能凑整的建议按照512整个扇区写,等到最后的数据凑齐了一个扇区写入。读取的时候去掉就行了。或者不凑齐反正也能正常写就是效率低。

使用特权

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

本版积分规则