UCOS学习日(6)互斥信号量,消息邮箱,消息队列

2023-05-16

互斥信号量

如果有三个任务ABC,优先级的顺序也是ABC,A和C共用一个信号。如果在C占用信号的时候,A处于等待状态,当B处于就绪状态的时候就会打断C任务的执行,从而影响A任务得到信号量。这样B任务就会出现优先级的反转。UCOS中引出一个互斥信号量来解决这个问题。

互斥信号量会在使用的过程中暂时的提高两个任务的优先级比任何任务的优先级都高,从而尽快使用完共享资源, 在释放完信号量以后恢复正常的优先级。
在这里插入图片描述
互斥型信号量将OSEventCnt分为两个部分,高八位用来存放避免优先级出现反转现象需要暂时提高的优先级prio,低八位用来存放信号值(0xFF表示信号量有效,否则信号量无效)

互斥型信号量的操作函数

创建

在这里插入图片描述

请求

在这里插入图片描述
如果等不到信号量就不等了使用
在这里插入图片描述

发送

在这里插入图片描述

获取互斥型信号量当前信息

在这里插入图片描述

删除

在这里插入图片描述

消息邮箱

用来在任务与任务之间传递一个数据
在这里插入图片描述

消息邮箱的操作函数

创建

在这里插入图片描述

向消息邮箱发信息

如果消息只发给等待任务中优先级最高的任务就调用下面的发送函数
在这里插入图片描述
如果消息发给每个等待任务,就调用下面的广播发送函数
在这里插入图片描述

请求消息邮箱

在这里插入图片描述
如果等待不到消息邮箱就不等了,执行后面的代码就使用
在这里插入图片描述

查询当前消息邮箱状态

在这里插入图片描述

删除消息邮箱

在这里插入图片描述

消息队列

消息队列可以在任务之间传递多条消息,消息队列又多了一个消息队列控制块,可以说是消息邮箱的升级版也不为过。
在这里插入图片描述

消息队列控制块

在这里插入图片描述
OSQStart 是消息队列的起始地址
OSQSize 是消息队列的大小
OSQOut 指向消息被取出的位置
OSOIn 指向消息被写入的位置
OSQEnd 指向消息队列的末尾地址
OSQEntries 已经存放消息的数目

书中有一个很形象的图,描述了消息队列
在这里插入图片描述
有两种方式使用消息队列,一种是先进先出,一种是后进先出
先进先出
IN指针写入消息然后后移,再然后到END位置的时候,会自动跳转到Start地址,
OUT指针跟在后面取出消息
后进先出
OUT指针写OUT指针读,写一个指针后移,读一个指针前移。

系统在初始化的时候也会根据OS_MAX_QS定义一个消息队列控制块链表,创建一个消息队列的时候,就会从链表中取出一个控制块

消息队列的操作函数

创建消息队列

在这里插入图片描述

请求消息队列

在这里插入图片描述

向消息队列发送消息

在这里插入图片描述

OSQPost()是先进先出的方式写入消息
OSQPostFront()是后进先出的方式写入消息
在这里插入图片描述
以广播的形式发消息

清空消息队列

在这里插入图片描述

查询消息队列当前状态

在这里插入图片描述

删除

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UCOS学习日(6)互斥信号量,消息邮箱,消息队列 的相关文章

  • 《当下即是生活》季羡林——读书笔记

    目录 书籍简介 经典摘录 三思而行 满招损 xff0c 谦受益 牵就与适应 睁一只眼 闭一只眼 论压力 论恐惧 难得糊涂 春色满寰中 槐花 书籍简介 作者季羡林 本书精选季羡林关于人生活法的散文 xff0c 阐述一个人怎样活在当下 xff0
  • Python装饰器

    Python的装饰器 decorator 可以说是Python的一个神器 xff0c 它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能 Python的装饰器同时也是Python学习从入门到精通过程中必需要熟练掌握的知识 小编我
  • Python学习笔记--带参数的装饰器

    带参数的装饰器 装饰器的副作用柯里化functools带参数的装饰器多参数小结 装饰器的副作用 def fn 39 39 39 this is fn 39 39 39 help fn 结果 xff1a Help on function fn
  • 六、51单片机之定时器/计数器_理论

    1 什么是定时器 计数器 定时器就是单片机设定一个时间间隔 xff0c 时间间隔到后通知单片机 例如设置100ms的定时器 xff0c 100ms后定时器通知单片机时间到了 1 定时器是单片机的一种内部外设 以前的单片机只有CPU 也就是只
  • 八、51单片机之蜂鸣器

    1 蜂鸣器的原理 蜂鸣器分为有源蜂鸣器和无源蜂鸣器 这里的 源 不是指电源 xff0c 而是指震荡源 1 1 无源蜂鸣器 1 早期蜂鸣器都是无源的 2 内部没有震荡电路 xff0c 无源蜂鸣器比有源蜂鸣器更便宜 3 无源蜂鸣器内部没有震荡源
  • CSS3实现loading效果

    前言 晚上躺床上刷视频的时候看到有个前端大佬写了一个loading xff0c 这是效果 xff1a loading 感觉也挺有意思哈 xff0c 要不自己也写一个 xff0c 学习 43 复习 两不误 但是又因为太晚了 xff0c 不想起
  • C#应用程序界面开发基础——窗体控制(2)——MDI窗体

    MDI窗体 单文档界面 xff08 SDI xff09 多文档界面 xff08 MDI xff09 MDI窗体的概念 MDI窗体 xff08 Multiple Document Interface xff0c 多文档界面 xff09 用于同
  • windows 10 + GTX1650 环境下基于TensorFlow的深度学习环境配置

    因论文需要 xff0c 简单的记录一个深度学习环境的配置过程 说明 xff1a 与广为应用的基于Anaconda的深度学习环境配置方法不同的是 xff0c 本文直接基于Python基础环境 43 Pycharm进行环境的配置 xff0c 不
  • TX2硬盘扩展

    TX2硬盘扩展 硬件平台 xff1a NVIDIA TX2 Samsung SSD 860EVO 系统平台 xff1a Ubuntu 18 04 LTS 安装 将硬盘连接至侧边SATA接口 扩展home 1 查看硬盘所有分区 sudo fd
  • Android手机4G网络设置ipv6

    我的卡是联通的 xff0c 所以下面截图也是联通的 xff0c 移动和电信的卡类似 xff1b 1 进入目录 xff1a 设置 移动网络 接入点名称 xff08 APN xff09 xff1b 2 点击默认的连接项 xff0c 进入详情页
  • 简单TCP编程

    1 TCP服务端 span class token macro property span class token directive hash span span class token directive keyword include
  • Redis的基本使用

    Redis简介 什么是Redis Redis是一款开源的内存数据库 xff0c 也称为键值存储 database 缓存 database 和消息队列 database 系统 它提供了丰富的数据结构和高效的操作方式 xff0c 并且支持多种编
  • Ubuntu16.04通过VNC远程桌面并开机自启动

    前置条件 xff0c 远程客户端已经安装VNC Viewer x11vnc安装 在Ubuntu 16 04中安装x11vnc xff0c 可以按照以下步骤操作 xff1a span class token comment 输入以下命令以更新
  • SpringBoot数据库读写分离

    导入maven坐标 span class token tag span class token tag span class token punctuation lt span dependency span span class toke
  • 滑模控制

    滑动模态的定义 人为设定一经过平衡点的相轨迹 xff0c 通过适当设计 xff0c 系统状态点沿着此相轨迹渐近稳定到平衡点 xff0c 或形象地称为滑向平衡点的一种运动 xff0c 滑动模态的 滑动 二字即来源于此 滑模控制的优点 xff1
  • FPGA基础之VGA(一)满屏红色

    一 项目分析 用VGA显示全屏的红色 xff0c VGA xff08 Video Graphics Array xff0c 视频图形阵列 xff09 是一种电脑显示标准 开发板采用至芯科技zx 1学习板 xff0c VGA视频显示接口是25
  • docker基础学习入门(六)------ DockerFile解析

    DockerFile是什么 Dockerfile是用来构建Docker镜像的构建文件 xff0c 是由一系列命令和参数构成的脚本 构建三步骤 xff1a 编写Dockerfile文件docker builddocker run 构建的文件什
  • C#应用程序界面开发基础——窗体控制(5)——分组类控件

    分组类控件 分组类控件有容器 xff08 Panel xff09 控件 分组框 xff08 GroupBox xff09 控件 选项卡 xff08 TabControl xff09 控件等 容器控件 容器控件是由System Windows
  • openmv4修改好的原理图和pcb文件

    openmv4修改好的原理图和pcb文件以及试验过的了 xff0c 生产过pcb文件 download csdn net download weixin 42741023 11953091
  • stm32h750/stm32h743原理图和pcb源文件

    stm32在目前使用非常广泛 xff0c 但是目前很多人都还停留在stmf1 f4仅仅只有72 128m主频阶段 xff0c stm32h743采用arm m7架构 xff0c 高达400m主频的处理器 xff0c 为我们的控制提供强有力的

随机推荐