全部学习汇总: GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.
这次看一下队列对象的复位处理以及调用。
一般带有这种中断保护的接口,都不适宜用于ISR中,这个是一个注意点。其他的信息,基本上是一个链表的信息初始化处理。也就是说,其实队列的处理本质上是链表。
如果队列对象是新创建的,可能会涉及到使用到队列的任务。如果任务是等待队列消息,那么不需要做额外处理,毕竟创建的初始时刻队列不会有信息。如果是发送,那么可能意味着接下来会有发送动作的发起。这样,发完了之后还得根据相应的情况看看是否存在调度。从这个函数的返回值信息来说,如果使用非抢占式的调度后面不会有其他的调度处理了,剩下的就是标准的队列处理套路。而如果是抢占模式,得看看是否有高优先级的任务就绪。
如果队列不是新创建的,所有的任务都在正常的运行态,只需要把队列链表重新做一个初始化即可。
返回值是为了跟之前的版本兼容,从其他接口的情况分析看,这个在之前版本中很可能是用来做任务调度请求的一个标志信息。
这个地方是这个复位接口在我现在工程中的唯一一次调用,也就是在初始化新的队列的时候。这个接口处理的内容其实刚好跟前面的代码分析吻合起来:pcHead肯定是有效的,在这里做了分配。同时,这里提供了后面队列复位操作用到的对列长度以及队列元素大小等基础信息。
这就是队列复位相关的分析,顺便也把初始化一个队列的操作看了一下。处理只是寻常的链表操作,没有特别的实现技巧。