1.使用消息队列

消息队列函数:

函数名 功能
OSQCreate() 创建一个消息队列
OSQDel() 删除一个消息队列
OSQFlush() 清空一个消息队列
OSQPend() 任务等待消息
OSQPendAbort() 任务被不再等待该消息
OSQPost() 提交一个消息给消息队列

任务中消息队列函数:

函数名 功能
OSTaskQPend() 等待一个消息
OSTaskQPendAbort() 任务被不再等待该消息
OSTaskQPost() 发送一个消息给任务
OSTaskQFlush() 清空这个消息队列

2.客户端和服务器端

错误管理任务管理其它任务或ISR发给它的错误情况。

3.消息队列的组成

消息由四个变量组成:指向下一条消息的指针、用于表明该消息所指向数据的大小的变量、

存放消息最后一次被提交的时间戳的变量、消息中包含一个指向实际数据的指针。

消息发送者和接收者都不知道消息中数据的结构因为这些都通过uC/OS-III的API隐藏起来了。

uC/OS-III维护一个消息池。消息池的大小通过OS_CFG_APP.H中的OS_CFG_MSG_POOL_SIZE设置。

当uC/OS-III被初始化时, 消息就会以单向列表的形式链接起来如图15-12。注意的是这个列表由

结构体OS_MSG_POOL管理, 它包含3个部分: .NextPtr指向该消息列表、.NbrFree包含了该队列

的空闲消息数、 .NbrUsed包含了该队列中已被使用的消息数。

消息的排列由结构体OS_MSG_Q控制 :

.InPtr 指向下一个将要被插入到队列的消息。
.OutPtr 指向下一个将要被释放的消息。
.NbrEntriesSize 包含了该队列所能接受的最大消息数。队列满后再往其中发送消息,消息将不会被插入。

.NbrEntries 当前队列中的消息数。
.NbrEntriesMax 记录了到目前为止队列中存放的最大消息数。

4.uC/OS-III中有一些函数用于操纵空闲的队列和消息。

比如:OS_MsgQPut()将消息插入到OS_MSG_Q, OS_MsgQGet()从

OS_MSG_Q中得到一个消息, OS_MsgQFreeAll()将所有OS_MSQ_Q
中的消息释放回消息池中。 OS_MSG.C中的其它一些OS_MsgQ??()
在初始化时使用。

OS_MSG_Q通常包含在两种结构体内: OS_Q和OS_TCB。创建一个OS_Q时就内建一个OS_MSG_Q。

当设置OS_CFG.H中的OS_CFG_TASK_Q_EN为1时,每个任务都有其内建的消息队列。

最新文章

  1. thinkphp vendor
  2. 课程上线 -“新手入门 : Windows Phone 8.1 开发”
  3. js解析网址获取需要的数据
  4. swiper 增加同页面增加2个滚动
  5. Linux 查找指定名称的进程并显示进程详细信息
  6. Unity4.5版本DLL库名字问题
  7. 【解题报告】POJ-1106 Transmitters
  8. Telerik RadGrid Demo
  9. data语意学
  10. jquery鼠标滑过展示图片时显示详情
  11. Windows Azure
  12. CSDN博客越来越垃圾了,到处放广告
  13. HTML5 使用FileReader实现调用相册、拍照功能
  14. springmvc +mybatis 配置多数据源
  15. 【Unity3D技术文档翻译】第1.2篇 为打包 AssetBundles 准备资产
  16. Url校验正则
  17. java基础之反射---重要
  18. Hibernate.基础篇《一》.Hibernate工具类.
  19. .net图表之ECharts随笔05-不同01的语法步骤
  20. Hibernate的批量查询

热门文章

  1. Effective Java 第三版——63. 注意字符串连接的性能
  2. POSTMAN发送WebService接口
  3. LNMP环境的搭建(yum)方法(精)
  4. 基于Python37配置图片文字识别
  5. plsql的特殊复制
  6. 什么是面向切面编程AOP--知识点汇总
  7. 判断当前viewcontroller是push还是present的方式显示的
  8. activemq 安装 部署
  9. Inside The C++ Object Model(三)
  10. vue-cli3实现分环境打包步骤(给不同的环境配置相对应的打包命令)