嵌入式实时操作系统μcos原理与实践5.pptVIP

  • 5
  • 0
  • 约6.88千字
  • 约 24页
  • 2021-01-03 发布于天津
  • 举报

嵌入式实时操作系统μcos原理与实践5.ppt

《嵌入式实时操作系统原理与实践》 嵌入式实时操作系统 μC/OS原理与实践 教材:嵌入式实时操作系统 μC/OS 原理与实践 电子工业出版社 luyl@ 作者卢有亮 图书 PPT 和全部代码下载 /15441 第 5 章 消息管理 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.1 消息邮箱 5.1.1 建立消息邮箱 5.1.2 等消息 5.1.3 发消息 5.1.4 删除消息邮箱 5.1.5 放弃邮箱等待 5.1.6 无等待请求消息 5.1.7 查询邮箱状态 5.1.8 消息邮箱的例子 5.2 消息队列 5.2.1 消息队列数据结构 5.2.2 初始化消息队列 5.2.3 建立消息队列 5.2.4 发消息到消息队列 5.2.5 等待消息队列中的消息 5.2.6 删除消息队列 5.2.7 取得消息队列的状态 5.2.8 消息队列应用举例 习题 ? 在信号量、互斥信号量和事件标志组的内 容结束后,读者对事件之间如何同步,如 何根据不同需要设计同步程序,应该有了 深入的理解和提高。本章的消息管理中包 括消息邮箱和消息队列两方面的内容,适 用于任务之间的信息交流和同步。从原理 上讲,消息管理也应该属于事件管理的范 畴 。 5.1 消息邮箱 消息邮箱是 μC/OS -II 中的另一种通信机制,可以使一个任务或者中断服务 子程序向另一个任务发送一个消息。传递这个消息的媒体是一个指针型变 量,该指针指向一个包含了“消息”的某种数据结构。 5.1.1 建立消息邮箱 在系统初始化之后,并不存在一个消息邮箱。这时操作系统中的事件管理 数据结构事件控制块 ECB 为全空,所有的事件控制块都在 ECB 空闲链 表中排队。消息邮箱的建立函数 OSMboxCreate 将使用一个并配置一 个 ECB ,使其具备消息邮箱的属性。 表 5.2 创建信号量函数 OSMboxCreate 解析 1. 检查是否这中断服务程序中创建消息邮箱。 同不允许在中断服务程序中创建信号量一样,操作系统 μC/OS -II 同样不允 许在中断服务程序中创建消息邮箱。 2. 检查是否有空闲的事件控制块。 将 OSEventFreeList 赋值给 pevent ,如果 pevent 为空指针,表示没有空闲的 事件控制块,函数返回。 3. 在事件控制块空闲链表中取下表头。 因为 pevent 现在已经是用于邮箱的事件控制块,读者可以直接把他理解为 一个邮箱。那么,需要执行的操作显然就是在事件控制块空闲链表中 将他删除 , 这时候 OSEventFreeList 应该指向第二个 ECB 。 4. 对事件控制块赋值 假设信号量值为 5 ,则赋值后的 ECB 应该如图 5-1 所示 5. 返回 ECB 地址。 5.1.2 等消息 开 始 参 数 检 查 是 否 通 过 是 将 邮 箱 中 的 消 息 地 址 送 p m s g p m s g 是 否 不 为 空 否 等消息也称为请求消息。含义是当消息存在的时候获取消息,当消息不存 置 位 O S T C B S t a t 中 等 待 消 息 标 志 在的时候就放弃对 CPU 的占有,直到有消息的时候才被唤醒。当任务后续 p e r r 中 填 写 对 应 的 出 错 信 息 的操作离不开消息,这时任务就不该死死占着 CPU 不让其他的任务运行, 存 储 超 时 时 间 到 就应该去休息,而当消息到来的时候系统会将消息唤醒回就绪态,任务获 O S T C B D l y 及 等 待 状 况 O S T C B S t a t P e n d 是 得消息后继续运行。 调 用 O S _ E v e n t T a s k W a i t 终 是 止 当 前 任 务 , E 解析 C B 事 件 表 5.3 等待消息邮箱函数 OSMboxPend 表 中 添 加 当 前 任 务 ★ 这 里 任 务 被 执 行 一 次 任 务 调 度 剥 夺 了 C P U ! 进 入 阻 塞 态 ! ★ ★ 这 里 任 务 又 一 次 被 调 度 了 ! 从 阻 塞 态 回 到 就 绪 态 又 被 调 度 是 调 用 O S _ E v e n t T a s k R e m o v e 清 除 任 务 块 相 关 等 待 标 志

文档评论(0)

1亿VIP精品文档

相关文档