1305_FreeRTOS的队列基本功能描述

全部学习汇总: GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)

这一次看一下FreeRTOS中的队列描述,至于代码实现可以后面找时间再做分析。其实之前自己折腾或者参与工作,FreeRTOS的队列还是用过很多的。队列的使用以及附加的消息传递功能的确给软件设计带来了很好的体验。

这个链接是官方的说明网页: Queues for task and interrupt message passing in FreeRTOS real time embedded software applications

上面的这个其实是一个动画,能够说明一个什么问题呢?首先,队列是先进先出的机制,其次,只要空间或者消息存在读写的动作其实是相对独立的操作。

关于这部分的描述其实很容理解,在之前的使用中其实我用的基本都是第一种模式。无论数据大小,我之前都是用了直接的数据拷贝。自然,之前的处理实现顺利其实是因为我所用的MCU的资源十分宽裕。其实,对于大一些的数据,可以采用传递指针的方式来实现。而这个机制也是FreeRTOS提供的网络库中采用的一种机制。其他的数据结构的处理其实也容易,因为收发的过程都是自己的软件逻辑,很容易定制灵活的机制来实现数据大小变化、数据类型变化等不同的需求。

FreeRTOS中的任务的状态有时候跟队列的操作有一定 关系,具体可以体现在队列处理导致的任务阻塞上。不管是对队列进行写操作还是读操作,都有可能因为队列的状态而导致阻塞状态的产生。如果一个任务对队列进行写操作,当队列满了的时候,负责写入的任务就会处于阻塞状态。直到队列有了新的空间或者阻塞时间到达或者超过了指定的超时时间。对于读取队列的任务来说也是类似的,但是读取的阻塞产生一般是发生在队列为空的时候。当队列为空的时候,任务阻塞。解除阻塞的条件就是队列中有了新的元素或者指定的超时时间到了。

之前的应用中,处理的前提条件还是很理想的。即使是CAN这样的数据并不算小的消息传递,我也用了完整的数据拷贝。这很安全,但是可能会有很高的资源消耗。

最近学习了一段时间的FreeRTOS之后,发现我疑惑的几个点现在都集中到了存储使用优化上了。看起来,接下来找一个监控以及调试的手段还是很迫切的事情了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值