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)
上一篇 2022年5月11日 下午10:40
下一篇 2022年5月11日 下午10:40


相关推荐

  • Android程序员的十大转型之路

    Android程序员的十大转型之路IT行业是一个瞬息万变的行业,程序员是一个不进则退的职业。我作为一个Android程序员,多年来一直保持随时可以转型其他技术领域的状态,保持对新技术敏感的嗅觉。

    2022年6月14日
    130
  • 基于Eclipse的Android开发环境搭建「建议收藏」

    基于Eclipse的Android开发环境搭建「建议收藏」对于才接触Android开发的人员来说,复杂的开发环境搭建,各种新知识,新内容要接触总是让人无从下手。通过这篇文章,让零基础开发人员成功搭建基于Eclipse的android开发环境。Android使用Java语言进行开发,首先我们需要搭建Java开发环境,在此基础上搭建Android开发环境。如果开发者有Java开发经验,并有基于Eclipse的Java开发环境,可以跳过Java开发环境搭建。

    2022年7月23日
    14
  • 文件锁的使用浅析_文件加密软件

    文件锁的使用浅析_文件加密软件概述在多数unix系统中,当多个进程/线程同时编辑一个文件时,该文件的最后状态取决于最后一个写该文件的进程。对于有些应用程序,如数据库,各个进程需要保证它正在单独地写一个文件。这时就要用到文件锁。文件锁(也叫记录锁)的作用是,当一个进程读写文件的某部分时,其他进程就无法修改同一文件区域。能够实现文件锁的函数主要有2个:flock和fcntl。早期的伯克利版本只支持flock,该…

    2022年4月19日
    65
  • jQuery下载安装详细教程,jQuery入门必备[通俗易懂]

    jQuery下载安装详细教程,jQuery入门必备[通俗易懂]jQuery是一套JavaScript的库,它简化了使用Javascript进行网页特效开发的一些复杂性,提供了对常见任务的自动化和复杂任务的简化。相对于JavaScript的库来说,更利于学习和掌握,而且具有简体中文的帮助文档,极大的方便了英文不好的网站建设人员的学习。下面我们介绍一下jQuery如何下载与安装?jQuery下载对于jQuery文件,我们可以到jQuery官网下载。jQuery文件有两个常用版本:一个是1.x版本,另一个是3.x版本。3.x版本是目前的最新版本,与1.x

    2022年6月5日
    36
  • linux每40分钟运行一次,【linux】crontab 每 16 分钟运行一次 的执行计划?

    linux每40分钟运行一次,【linux】crontab 每 16 分钟运行一次 的执行计划?我一直以为 crontab 16 是从加入执行计划时间开始 每 16 分钟运行一次 今天因为其他原因记录了一下日志 才发现原来不是我想的那样 如图 忽略标红的内容 实际执行计划其实是每小时的 0 分 16 分 32 分 48 分执行的 于是我特意在 http tool lu crontab 测试了一下 执行计划确实如上图所示 我又做了如下测试 gt 0 13 那

    2026年3月26日
    2
  • Switch case break/ default总结

    Switch case break/ default总结1 写 switchcase 语句不加 break 会怎样 switchcase 语句犯得错误 会犯这种错误 都是基础不牢固导致的 但是这样的错误却花费了我数小时去 debug 想来真是很让人郁闷 看一段代码 不想看代码直接看后面总结 privatevoid nbsp arrange nbsp nbsp nbsp nbsp switch nbsp direction nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp case nbsp U nbsp nbsp nbsp nbsp nbsp case R nbsp nbsp

    2026年3月17日
    2

发表回复

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

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