UCOSII操作系统学习之任务间的通信(1)

UCOSII操作系统学习之任务间的通信(1)1.任务间通讯方式:信号量和邮箱为了把描述事件的数据结构统一起来,UCOSII使用叫做事件控制块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。信号量,邮箱,消息队列都是一类事件。2.信号量:1)创建信号量OS_EVENT*OSSemCreate(INT16Ucnt)…

大家好,又见面了,我是你们的朋友全栈君。

1.任务间通讯方式:信号量和邮箱

为了把描述事件的数据结构统一起来,UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。信号量,邮箱,消息队列都是一类事件

2.信号量:                          1) 创建信号量OS_EVENT *OSSemCreate (INT16U cnt)

                                           2)请求信号量 OSSempend(OS_EVENT *pevent,INT16U timeout,INT8U *err;

                                           3)  发送信号量(访问共享资源结束后,释放信号量)OSSemPost(OS_EVENT *pevent);

                                           4)删除信号量(不需要某个信号量时) OSSemDel(OS_EVENT *pevent,INT8U opt,INT8U *err)。

3.邮箱:在多任务操作系统中,常常需要在任务与任务之间通过传递一个数据(这个数据叫消息的方式来进行通信。为了达到这个目的,可以在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区称之为消息缓冲区,这样在任务间传递数据的最简单办法就是传递消息缓冲区的指针。我们把用来传递消息缓冲区指针的数据结构叫做邮箱

   1)创建消息邮箱:OS_EVENT *OSMboxCREAT(void *msg);函数中的参数msg为消息的指针,函数的返回值为消息邮箱的指针。

   2)  向消息邮箱中发送消息函数 OSMBoxPost(OS_EVENT *pevent,void *msg);其中pevent为消息邮箱的指针,msg为消息指针。

   3)  请求邮箱:OSMboxPend ( vOS_EVENT *pevent, INT16U timeout, INT8U err),这个函数的主要作用就是查看邮箱指针OSEventPtr是否为NULL,如果不是NULL就把邮箱中的消息指针返回给调用函数的任务,同时用OS_NO_ERR通过函数的参数err通知任务获取消息成功;如果邮箱指针OSEventPtr是NULL,则使任务进入等待状态,并引发一次任务调度。pevent为请求邮箱指针,timeout为等待时限,err为错误信息。

   4)查询邮箱状态:OSMboxQuery(OS_EVENT *pevent,OS_MBOX_DATA *pdata),其中pevent为纤细邮箱指针,pdata为存放邮箱信息的结构。

   5)删除邮箱函数:OS_EVENT *OS_MboxDel(OS_EVENT *pevent,INT8U opt,INT8U *err);其中pevent为消息邮箱指针,opt为删除选项,err为错误信息

4.对任务控制块的理解

 任务控制块就是一个结构体,结构体中定义了许多与任务相关的变量,包括优先级等。任务堆栈和任务控制块是一一对应的关系,任务堆栈可以理解为一个存储器,每个任务都有一个任务堆栈,任务堆栈就是装任务控制块的,只是不是直接装,而是通过任务控制块里面的任务堆栈指针变量指向任务堆栈而已,同时可以将所有任务控制块链接为一个任务链表,这样方便任务的管理,任务管理实质是对任务链表的管理。

UCOSII操作系统学习之任务间的通信(1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144088.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA20.3.1激活码(最新序列号破解)

    IDEA20.3.1激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    171
  • 解析土豆视频下载地址以及硕鼠网原理

    解析土豆视频下载地址以及硕鼠网原理

    2021年8月20日
    127
  • vscode设置终端_vscode 关联PDF

    vscode设置终端_vscode 关联PDFhttps://blog.csdn.net/qq_36743482/article/details/103487025

    2025年5月27日
    0
  • 微信表情符号已写入判决书怎么删除_微信100个表情符号含义

    微信表情符号已写入判决书怎么删除_微信100个表情符号含义本文转载自IT之家,IT之家3月3日消息据法治日报报道,如今表情符号已经成为呈堂证供的一部分,登上多地法院判决书等司法文书。报道称,在广东省深圳市中级人民法院发布的一份民事判决书中,对一起涉及微信表情的合同纠纷案作出了判决。作为创作者的卢泓于2018年4月24日向深圳市道一影业集团有限公司法定代表人田民发送其创作的歌词。后者表明其在路上后,发送了微信表情符号[强]。“结合双方的前后聊天内容,一审法院认为该微信表情符号[强]并非是对卢泓歌词的认可,而是属于礼貌性回复,不能

    2022年10月22日
    0
  • if python用法_for循环语句

    if python用法_for循环语句今天,我们将学习Python中if语句的基本使用。if在Python中用作某个条件或值的判断,格式为:if条件: 执行语句1else: 执行语句2else是当条件不成立时运行的代码。我们先来看个例子,程序判断天气情况并输出是否要带伞:weather=input(“今日天气是:”)ifweather==”雨天” print(“今天出门需要带伞”)else: print(“今天出门不需要带伞”)运行代码,输入雨天会提示要带伞。if语句中用的两个“=”是什么呢

    2022年9月26日
    0
  • Linux下LAMP的配置详解

    Linux下LAMP的配置详解LAMP的搭建需要安装httpd  phpmysql 三个程序安装完以后先修改httpd的配置文件首先先修改全局配置文件 也就是主配置文件/etc/httpd/conf/httpd.conf将ServerRoot改为ServerRoot"/etc/httpd"将Listen改为Listen80将网站的根目录改为DocumentRoot"/var/www/html"将默认配置索引文件改…

    2022年6月6日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号