码迷,mamicode.com
首页 > 其他好文 > 详细

17.4-uC/OS-III消息管理(任务消息队列)

时间:2018-08-07 22:00:31      阅读:1012      评论:0      收藏:0      [点我收藏+]

标签:相对   其他   延迟   发布   必须   工作原理   abort   task   post   

任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在,

只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息,

却不能接收。任务消息队列与(普通)消息队列极其相似,只是任务消息队列已隶属于一个特定任务,

所以它不具有等待列表, 省去了等待任务插入和移除列表的动作,所以工作原理相对更简单一点,

效率也比较高一些。

1.原理

如果想要使用任务消息队列,就必须事先使能任务消息队列。消息队列的使能位于
os_cfg.h”。

特别声明,任务消息队列和(普通)消息队列公用一个消息池。一般任务消息队列或普
通消息队列的最大消息容量不要超过消息池的消息数目。

2.OSTaskQPost ()
OSTaskQPost () 函数用于向任务消息队列发布一个消息。OSTaskQPost () 函数的定义也位于“os_task.c”。
其实,不管是否使能了中断延迟发布,最终都是调用 OS_TaskQPost () 函数进行发布任
务消息。只是

使能了中断延迟发布的发布过程会比较曲折,中间会有许多插曲。

OS_TaskQPost () 函数中,会调用 OS_MsgQPut () 函数从消息池获取一个消息插入到消息队列。 OS_MsgQPut () 函数的定义位于“os_msg.c”。

3.OSTaskQPend ()
OSTaskQPost () 任务消息队列发布消息函数相对应,OSTaskQPend () 函数用于等待获
取任务消息队列的消息。
OSTaskQPend () 函数的定义也位于“os_task.c”。
OSTaskQPend () 函数中,会调用 OS_MsgQGet () 函数从任务消息队列获取一个消息。OS_MsgQGet () 函数的定义位于“os_msg.c”。

4.OSTaskQPendAbort ()
OSTaskQPendAbort () 函数用于 中止任 务对其任 务 消息 队列的 等待。 要使用
OSTaskQPendAbort () 函数, 除了要先使能前面的 OS_CFG_TASK_Q_EN 外,还得使能
OS_CFG_TASK_Q_PEND_ABORT_EN(位于“os_cfg.h”)。
OSTaskQPendAbort () 函数的定义位于“os_task.c”。

 

17.4-uC/OS-III消息管理(任务消息队列)

标签:相对   其他   延迟   发布   必须   工作原理   abort   task   post   

原文地址:https://www.cnblogs.com/xigongxiaosha/p/9439627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!