Ucosii消息邮箱使用

2023-05-16

//设置任务优先级
#define LED_TASK_Prio       6
#define LED1_TASK_Prio      5

 

用到的UCOSII函数
消息邮箱创建函数: 
OS_EVENT  *OSMboxCreate (void *msg)
请求消息邮箱函数:  
void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
向邮箱发送消息函数:
INT8U  OSMboxPost (OS_EVENT *pevent, void *msg)//向等待任务表中高优先级的任务发送消息
广播邮箱消息函数: 
INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)//向等待任务表中所有任务发送消息

 

按键扫描任务中,如果KEY0被按下,那么将向消息邮箱Str_Box发送消息1,
     i=1;
    OSMboxPost(Str_Box,&i); //发送消息1
 如果KEY1被按下,那么将发送消息2,
     i=2;
    OSMboxPost(Str_Box,&i); //发送消息2
 如果KEY2(WK_UP)被按下,将向所有等待任务表中所有任务发送消息3,
     i=3;
    OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任务广播消息3

 

实验现象:

我们可以看到,如果我们按下KEY0,因为TaskLed1的优先级别高于TaskLed,所以当两个任务都在等待的时候,只有TaskLed1可以收到消息1,所以两个LED都不反转。
如果按下KEY1,那么TaskLed1收到消息2,状态反转。
如果按下KEY2,那么TaskLed1和TaskLed都会收到消息,这个时候两个LED状态都会反转。

OSMboxPostOpt()OSMboxPost()的区别在于前者是广播消息,所有等待任务都可以收到,后者只会高优先级的任务收到。

下面给出消息邮箱的使用例程

[objc] view plain copy print ?
  1. OS_EVENT *Str_Box;  
  2.   
  3.   
  4. Str_Box = OSMboxCreate ((void*)0);  //创建消息邮箱  
  5. //任务1  
  6. //控制DS0的亮灭.  
  7. void TaskLed(voidvoid *pdata)  
  8. {   u8 result=0;  
  9.     while(1)  
  10.     {   result= *((u8 *)OSMboxPend(Str_Box,0,&err)); //请求消息邮箱  
  11.         if(result ==1||result ==3){   
  12.           LED0=!LED0;  
  13.         }  
  14.         OSTimeDlyHMSM(0,0,0,200);     
  15.     }  
  16. }  
  17.   
  18. //任务3  
  19. //按键检测    
  20.  void TaskKey(voidvoid *pdata)  
  21.  {  
  22.     u8  key=0,i=0;  
  23.      
  24.     while(1){  
  25.       key=KEY_Scan();  
  26.       if(key==1)   
  27.       {  
  28.        i=1;  
  29.        OSMboxPost(Str_Box,&i); //发送消息1     //注意:消息邮箱的要发送的数据变量可以是临时变量!!!因为这个临时变量在任务生存期间一直存在
  30.       }  
  31.       else if(key==2)  
  32.       {  
  33.        i=2;  
  34.        OSMboxPost(Str_Box,&i); //发送消息2       //注意:消息邮箱的要发送的数据变量可以是临时变量!!!
  35.               
  36.       }               
  37.       else if(key==3)  
  38.       {   
  39.        i=3;  
  40.        OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任务广播消息3       //注意:消息邮箱的要发送的数据变量可以是临时变量!!!
  41.       }  
  42.       OSTimeDlyHMSM(0,0,0,20);         
  43.     }  
  44.  }  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ucosii消息邮箱使用 的相关文章

  • UCOSII中的任务切换原理介绍

    1 多任务的引入 之所以引入多任务 xff0c 主要在于提高程序运行的效率 多任务的过程 xff0c 能够有效地发挥交换式任务的运作效率 类似的 xff0c 由于一个任务里面也有瓶颈的地方 xff0c 为了把瓶颈的地方抠出来 xff0c 让
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • stm32 ucosii消息队列 串口_UC/OSII消息队列、信号量集和软件定时器

    UCOSII消息队列 信号量集和软件定时器简介 上一章 xff0c 我们介绍了信号量和邮箱的使用 xff0c 本章我们介绍比较复杂消息队列 信号量集以及软件定时器的使用 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组
  • UCOSII-信号量与信号量集

    文章目录 一 前言1 任务间的同步2 事件 二 信号量1 信号与信号量介绍2 信号量常用函数3 信号量使用流程 xff08 互斥信号量和信号量两种 xff09 4 互斥型信号量使用5 使用一般信号量做任务同步 三 信号量集 事件标志组 1
  • ucosii中消息队列、消息邮箱、信号量的区别

    1 用信号量进行行为同步时 xff0c 只能提供同步的时刻信息 xff0c 不能提供内容信息 若被控制方要求得到控制方的内容信息时 xff0c 可以使用消息邮箱或消息队列 2 但由于消息邮箱里只能存放一条消息 xff0c 所以使用消息邮箱进
  • ucosii消息队列学习

    近期在学习ucosii的内容使用的平台为STM32F103C8T6最小系统板 今日关于消息队列的使用遇到了一些问题 基本情况 xff1a 移植代码为正点原子ucosiii消息队列 信号量集和软件定时器例程 主要新建两个任务post task
  • Ucosii消息邮箱使用

    设置任务优先级 define LED TASK Prio 6 define LED1 TASK Prio 5 用到的UCOSII函数 消息邮箱创建函数 xff1a OS EVENT OSMboxCreate void msg 请求消息邮箱函
  • 学习ucosii要用到的几本书和软件

    原帖地址 xff1a http bbs ednchina com BLOG ARTICLE 2020186 HTM 打算学习一个嵌入式操作系统 xff0c 研究了一下决定还是先研究一下ucosii xff0c 一方面权当学习C语言 xff0
  • rtthrea-ucosii-freertos三系统学习总结

    三系统基本功能对比 RT thread ucosii freertos 任务调度 抢占式 时间片式 xff08 多级队列位图调度 xff09 抢占式 xff08 纯位图调度 xff09 抢占式 时间片式 xff08 遍历列表调度 xff09
  • 基于UCOSII的RS485通信(STM32F107)

    一 实现效果 基于ucosii实时操作系统的RS485通信 xff0c 采用USART 43 DMA进行收发 xff0c 二 开发环境 开发工具 xff1a KEIL V5开发板 STM32f107RC采用方式 xff1a USART 43
  • UCOSII 使用笔记

    UCOS使用总结 1 UCOS 是抢占式系统 xff0c 换句话来说 xff0c 优先级高的能够被准时执行 xff0c 优先级低的很容易被高优先级抢占 xff0c 导致执行任务延迟 2 UCOS一般为64个优先级 xff0c 有些可以到25
  • 从零开始学习UCOSII操作系统4--任务管理

    从零开始学习UCOSII操作系统4 任务管理 1 重讲任务 1 任务可以是一个无限的循环 xff0c 也可以在一次执行完毕后被删除 这里需要注意的是 xff0c 任务的代码并不是真正的删除了 xff0c 而是UCOSII不再理会该任务代码
  • 从零开始学习UCOSII操作系统7--信号量

    从零开始学习UCOSII操作系统7 信号量 参考博客 xff1a 64 http blog csdn net gatiemehttps blog csdn net gatieme article details 21071379 前言 xf
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 再读 ucosII源码(邵贝贝):任务之间的通讯与同步--邮箱

    邮箱简介 xff1a 邮箱是 C OS II中另一种通讯机制 xff0c 它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量 该指针指向一个包含了特定 消息 的数据结构 为了在 C OS II中使用邮箱 xff0c 必须将O
  • ucosII的书籍

  • UCOSII 信号量和信号量集实例

    代码来自于书本光盘 嵌入式操作系统UCOSII原理及应用 实例1信号量 include 34 includes h 34 define TASK STK SIZE 512 任务堆栈长度 OS STK StartTaskStk TASK ST
  • UCOSII里面为什么调用OS_ENTER_CRITICAL()或OS_EXIT_CRITICAL()会出错,出错信息为:undeclared identifier `cpu_sr‘

    可以观察到OSTickISR Init 函数内部调用了OS ENTER CRITICAL 和OS EXIT CRITICAL 并且 1 该OSTickISR Init 函数所在的 C文件包含了includes h文件 include inc
  • stm32 ucos/ii移植,程序执行到OSStart()内部的OSStartHighRdy()语句时跑飞问题解决方法之一

    stm32 ucos ii移植 程序执行到OSStart 内部的OSStartHighRdy 语句时跑飞问题解决办法之一 网络上的一些解决办法 stm32程序遇到OSStartHang的问题解决方法总结 但并不适合我遇到的情况 我的情况是已
  • os_mutex.c(全)

    无等待地获取互斥型信号量 OSMutexAccept OS EVENT pevent INT8U perr 创建互斥型信号量OS EVENT OSMutexCreate INT8U prio INT8U perr 删除信号量OS EVENT

随机推荐

  • mysql函数汇总之字符串函数

    字符串函数主要用来处理数据库中的字符串数据 mysql中的字符串函数有计算字符串长度函数 字符串合并函数 字符串替换函数 字符串比较函数 查找指定字符串位置函数等 计算字符串字符数的函数 CHAR LENGTH str 函数计算字符串str
  • mysql函数汇总之日期和时间函数

    日期和时间函数主要用来处理日期和时间值 xff0c 一般的日期函数除了使用date类型的参数外 xff0c 也可以使用datetime或者timestamp类型的参数 xff0c 但会忽略这些值的时间部分 获取当前日期的函数 curdate
  • [ Ubuntu 使用技巧 ] 在当前工作目录打开 Terminal

    1 General Purposes Why I wrote this 在 Ubuntu 系统开发最舒服的一点就是可以开心地使用 Terminal 这是个好东西 xff0c 尤其当你熟悉大部分的常用命令之后 xff0c 对日常的代码工作还有
  • mysql函数汇总之条件判断函数

    条件判断函数也被称为控制流程函数 xff0c 根据满足的不同条件 xff0c 执行响应的流程 mysql中进行条件判断的函数有if ifunll和case等 IF expr v1 v2 函数 IF expr v1 v2 xff1a 如果表达
  • mysql函数汇总之系统信息函数

    mysql的系统信息有数据库的版本号 当前用户名和连接数 系统字符集 最后一个自动生成的ID值等 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • mysql数据库中的数据如何加密呢?mysql8.0自带新特性

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • mysql还有哪些自带的函数呢?别到处找了,看这个就够了。

    格式化函数FPRMAT x n format x n 将数字x进行格式化 xff0c 并以四舍五入的方式保留小数点后n位 xff0c 结果以字符串的形式返回 如果n为0 xff0c 则返回结果函数不含小数部分 mysql gt select
  • mysql中还有窗口函数?这是什么东西?

    什么是窗口函数 xff1f 在mysql8 0的版本中 xff0c 新增了一个窗口函数 xff0c 用他可以实现很多新的查询方式 窗口函数类似于sun count 那样的集合函数 xff0c 但它并不会将多行查询结果合并为一行 xff0c
  • 记一次mysql查询慢的优化历程

    有一个项目 xff0c 代称cc xff0c 用了我们公司的产品 xff0c 单表数据量在200万左右 在做业务操作的时候 xff0c 点击一下按钮 xff0c 需要等待2 3分钟 及其难以忍受 xff0c 特此让我们修改 PS xff1a
  • configure: error: No curses library functions found

    centos上编译程序报错如下 xff1a configure error No curses library functions found 这个错误是因为缺少 curses 库导致的 在CentOS 7中 xff0c 可以通过以下命令安
  • STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

    STM32使用内部RC振荡器时 xff0c OSC32 IN xff0c OSC32 OUT接法 xff1a 1 xff09 对于100脚或144脚的产品 xff0c OSC IN应接地 xff0c OSC OUT应悬空 2 xff09 对
  • 项目笔记(6):阿里云的Iot Studio和web可视化

    项目笔记 xff08 4 xff09 阿里云物联网的自定义主题和物联网模型
  • k-近邻算法实现手写数字识别系统

    k 近邻算法实现手写数字识别系统 一 实验介绍 1 1 实验内容 本实验将会从电影题材分类的例子入手 xff0c 详细讲述k 近邻算法的原理 在这之后 xff0c 我们将会使用该算法实现手写数字识别系统 1 2 课程来源 本课程源自 图灵教
  • sqlite 句柄-sqlite 基础教程(3)

    要操纵一个数据库你就得有一个这个数据库的句柄 又碰到这个难以理解的词了 xff0c 不过确实还没得一个更好的词来替代它 其实你跟本不需要去在乎这个词叫什么 xff0c 你只要搞清楚他是一个什么玩意儿 就如同鞋子为什么叫鞋子 xff0c 仔细
  • ROS机器人操作系统的安装、配置与初级教程 1

    ROS 安装 环境配置与测试 此课程为ROS配置与使用介绍 xff0c 如果为已经并安装配置好的环境 xff0c 本课程可作为ROS基础知识进行学习和掌握 xff0c 不用重新进行配置 实验楼已经为你配置好在线环境 ROS中文维基 ROS中
  • 【ESP32Cam项目1】:ESP32Cam人脸检测(ArduinoESP32底层、Python版opencv)

    人脸检测项目效果图 xff1a 人脸检测效果视频 xff1a 暮年的主页 抖音 douyin com 人脸检测项目目标 xff1a 大家好 xff01 近期拿到了便宜的ESP32Cam开发板 xff0c 摄像头让我想起来人脸识别 xff0c
  • arduino配置ESP8266开发环境不成功的解决方案

    在这里我向大家分享一下干货 好多人用arduino配置esp8266的开发环境不成功 xff0c 速度慢 xff0c 卡在一个地方就停止不动了 xff0c 安装进度条几十分钟不动一下等等问题 xff0c 这里有详细的解决方案 首先 xff0
  • ESP8266与网络调试助手的UDP双向传输

    最近开始毕设 xff0c 其中的一部分是esp8266与网络监控助手的双向传输 xff0c 无加密 我的这篇文章是小白写给小白的专属 xff0c 大神就不要看了 首先 xff0c 买来esp8266模块 xff0c 看AT指令 xff0c
  • JQuery获取指定属性的标签

    通过遍历标签的形式 xff0c 获取指定的标签进行相关操作 span class token function span span class token punctuation span span class token string 3
  • Ucosii消息邮箱使用

    设置任务优先级 define LED TASK Prio 6 define LED1 TASK Prio 5 用到的UCOSII函数 消息邮箱创建函数 xff1a OS EVENT OSMboxCreate void msg 请求消息邮箱函