1305_FreeRTOS的队列基本功能描述
Posted wx5acc709d2a747
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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之后,发现我疑惑的几个点现在都集中到了存储使用优化上了。看起来,接下来找一个监控以及调试的手段还是很迫切的事情了。
以上是关于1305_FreeRTOS的队列基本功能描述的主要内容,如果未能解决你的问题,请参考以下文章