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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • elasticsearch数据库搭建 window版

    elasticsearch数据库搭建 window版说明:安装elasticsearch之前必须安装好jdk运行环境1.首先下载安装包:这是官网最新安装包:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-windows-x86_64.zip2.直接解压到想要安装的目录即可 3.配置文件打开config下的elasticsearch.yml…

    2022年6月7日
    32
  • vbnet怎么连接access数据库(VB·Net视频)

    在向大家详细介绍VB.NETAccess数据库连接之前,首先让大家了解下VB.NET的简介,然后全面介绍VB.NETAccess数据库连接。VisualBasic.NET是从VisualBasic语言演变而来vb.net教程的,是一种为高效地生成类型安全和面向对象的应用程序而设计的语言。VisualBasic允许开发人员开发面向Windows、Web和移动设备的程序。与所有面向Microsoft.NETFramework的语言一样,使用VisualBasic编写的程序

    2022年4月16日
    169
  • gradle教程_Gradle教程

    gradle教程_Gradle教程gradle教程WelcometoGradleTutorial.Inmyearlierposts,welookedintoWhatisGradleandGradleEclipsePlugin.欢迎使用Gradle教程。在我之前的文章中,我们研究了什么是Gradle和GradleEclipse插件。Gradle教程(GradleTutorial)…

    2022年6月28日
    26
  • bs是cs的一种吗_cs客户端和bs客户端

    bs是cs的一种吗_cs客户端和bs客户端一,B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到二,区别(C/S与B/S):1.硬件环境不同:C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门2.对安全要求不同:C/S一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。可以通过B/S发布…

    2022年10月17日
    0
  • 使用Fiddler进行Mock测试

    使用Fiddler进行Mock测试目录1、接口抓包2、复制该接口数据到本地3、修改你要mock的数据4、替换json文件1)在websession面板中找到对应的请求,然后将其拖到AutoResponder面板中。2)在RuleEditor中单击“Findafile…”,选择本地json文件的路径。5、激活规则6、save,刷新页面1、接口抓包找到要mock的接口,打开fiddler抓包以某某接口为例,找到下面的接口http://XXX/SYSTEMS2、复制该接口数据到本..

    2022年6月20日
    118
  • pycharm配置tensorflow环境_python3.6对应的tensorflow版本

    pycharm配置tensorflow环境_python3.6对应的tensorflow版本Round1:打开PyCharm,点击File->Settings,点击弹出界面的“+”号,在搜索框中键入关键字“tensorflow”,从列表中选中“tensorflow”,点击下方的“InstallPackage”,等待一段时间,华丽丽的安装失败了-_-Round2:在Pycharm的terminal中运行pipinstalltensorflow,在等了半小时后,倒计时还有3个多小时,我弃疗了!安装失败!Round3:以上用的都是官方的源,现在考虑换成国

    2022年8月26日
    3

发表回复

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

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