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

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

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

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

效率也比较高一些。

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消息管理(任务消息队列使用)的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. 17.3-uC/OS-III消息管理(消息队列使用)

    多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...

  3. 微信公众号开发C#系列-6、消息管理-普通消息接受处理

    1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...

  4. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  5. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  6. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  7. 17.1-uC/OS-III消息管理(两种消息队列)

    1.使用消息队列 消息队列函数: 函数名 功能 OSQCreate() 创建一个消息队列 OSQDel() 删除一个消息队列 OSQFlush() 清空一个消息队列 OSQPend() 任务等待消息 ...

  8. 17.2-uC/OS-III消息管理(任务消息队列)

    1.任务的消息队列 uC/OS-III在任务中内建了一个消息队列.用户可以直接发送消息给任务而不通过外部消息队列. 这个特性不仅简化了代码, 还提供了效率.每个任务都内建一个消息队列. uC/OS-I ...

  9. 17.0-uC/OS-III消息管理

    消息传递 有些情况下任务或ISR与另一个任务间进行通信,这种信息交换叫做作业间的通信. 可以有两种方法实现这种通信: 全局变量. 发送消息. 1.果使用全局变量,任务或ISR就须确保它独占该变量.如果 ...

随机推荐

  1. CentOS 7下升级Python版本到3.x系列

    由于python官方已宣布2.x系列即将停止支持,为了向前看,我们升级系统的python版本为3.x系列服务器系统为当前最新的CentOS 7.4 1.安装前查看当前系统下的python版本号 # p ...

  2. 使用Mybatis-Generator自动生成Dao、Model、Mapping

    Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件. 1.相关文 ...

  3. Git Pro深入浅出(三)

    七.自己定义Git 前面已经阐述了Git基本的运作机制和使用方式,介绍了很多Git提供的工具来帮助你简单且有效地使用它.本部分将演示怎样借助Git的一些重要的配置方法和钩子机制,来满足自己定义的需求. ...

  4. python 操作Sqlite

    Python sqlite 官方文档: https://docs.python.org/2/library/sqlite3.html 1. 连接 #!/usr/bin/python3 import s ...

  5. hive sql求多个字段的最小值和最大值的办法

    1. 准备数据表test2 create table test2( a int, b int, c int, d int, e int); 2. 准备2条数据 ,,,,); ,,,,); 查询显示如下 ...

  6. tensorflow finuetuning 例子

    最近研究了下如何使用tensorflow进行finetuning,相比于caffe,tensorflow的finetuning麻烦一些,记录如下: 1.原理 finetuning原理很简单,利用一个在 ...

  7. bootstrap引入文件方法

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  8. 异常:Project configuration is not up-to-date with pom.xml 解决方案

    错误描述,在导入Maven项目后出现下面错误: Description Resource Path Location Type Project configuration is not up-to-d ...

  9. [转] C#中的delegate 和 event

    转至:here 终于会用c#中的delegate(委托) 作者:qq826364410 引言 Delegate是Dotnet1.0的时候已经存在的特性了,但由于在实际工作中一直没有机会使用Delega ...

  10. HTML自动跳转

    本文首发于 http://youngzy.com/ 关于页面的自动跳转,以前知道有JavaScript的方法,直接设置window.location 或者在setTimeout 函数里进行设置. 现在 ...