uCOS-II任务间通信之事件控制块

UCOS基础概念总结 1、UCOS UCOS III 是一个可裁剪、可固化、可剥夺型的多任务内核,没有任务数目限制。UCOS II有任务数量限制,最多64个任务。UCOS III与UCOS II的大致区别是:a,任务数目由64个变为无限个。b,优先级相同的任务数目由1个变为无限制个。c,UCOS III增加了时间片轮转调度。d,UCOS III可直接向任务发送信号,UCOS II不可以。e,UCOS III可直接向任务 阅读详情
uCOS-II任务间通信之事件控制块
信号、邮箱、消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这一东西。
那什么是事件控制块呢?
可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本质的过程就是初始化这个事件控制块。
一个任务或者中断服务子程序可以通过事件控制块ECB(Event Control Blocks)来向另外的任务发信号。这里,所有的信号都被看成是事件(Event)。一个任务还可以等待另一个任务或中断服务子程序给它发送信号。这里要注意的是,只有任务可以等待事件发生,中断服务子程序是不能这样做的。这点要注意,记得mcu21刚开始的时候就傻傻地在中断处理函数里等待信号量,后果就是系统直接死机。
对于处于等待状态的任务,还可以给它指定一个最长等待时间,以此来防止因为等待的事件没有发生而无限期地等下去。
多个任务可以同时等待同一个事件的发生[F6.1B]。在这种情况下,当该事件发生后,所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上面讲到的事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号量时,任务可以等待它,也可以给它发送消息。
 
事件控制块是一个数据结构,其定义如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. typedef struct {  
  2.     void   *OSEventPtr;                     /* 指向消息或者消息队列的指针 */  
  3.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* 等待任务列表               */  
  4.     INT16U  OSEventCnt;                     /* 计数器(当事件是信号量时)   */  
  5.     INT8U   OSEventType;                    /* 时间类型                   */  
  6.     INT8U   OSEventGrp;                     /* 等待任务所在的组           */  
  7. } OS_EVENT;  

.OSEventPtr指针,只有在所定义的事件是邮箱或者消息队列时才使用。当所定义的事件是邮箱时,它指向一个消息,而当所定义的事件是消息队列时,它指向一个数据结构。
.OSEventTbl[] 和 .OSEventGrp 很像前面讲到的OSRdyTbl[]和OSRdyGrp,只不过前两者包含的是等待某事件的任务,而后两者包含的是系统中处于就绪状态的任务。
.OSEventCnt 当事件是一个信号量时,.OSEventCnt是用于信号量的计数器。

.OSEventType定义了事件的具体类型。它可以是信号量(OS_EVENT_SEM)、邮箱(OS_EVENT_TYPE_MBOX)或消息队列(OS_EVENT_TYPE_Q)中的一种。用户要根据该域的具体值来调用相应的系统函数,以保证对其进行的操作的正确性。

RTOS之UCOS(三)---任务间同步与通信 一、临界区保护 之前谈到C++多线程并发编程时就强调过线程同步的问题,现在操作系统进行多任务调度时自然也少不了任务同步的问题,前面谈线程同步时已经讲清楚了如何防止共享资源的并发访问,任务同步的情况与此类似,就不再赘述了。 线程同步中防止共享资源并发访问的方法主要是使用锁机制或原子操作,操作系统任务同步中主要也是加锁和原子操作,但多出了一个临界区的概念,所谓临界区(也称为临界段),就是访问和操作共享... 阅读详情

相关推荐

深入探索实时操作系统uCOS-II的设计与应用

本文还有配套的精品资源,点击获取 简介:本书系统地介绍了实时操作系统(RTOS)的设计和使用,特别是uCOS-II的核心概念和机制。uCOS-II是一个针对资源有限的嵌入式设备设计的高效实时操作系统内核,涉及任务调度、内存管理、任务间通信以及中断处理等关键技术。本书详细阐释了uCOS-II的优先级调度、内存管理、同步机制、中断处理、定时器服务等关键组成部分,并介绍了其在多种...

weixin_32661831的博客 1068

ucos II 任务间 通信之二:事件控制块

ucos II 任务间 通信之二:事件控制块 信号,邮箱,消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这一东西。 什么是事件控制块呢? 可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列)

专注于嵌入式开发 8531

告别手动下载!用Python脚本5分钟搞定NREL风速数据(附完整API调用代码)

本文详细介绍了如何使用Python脚本自动化获取NREL风速数据,从API密钥申请到数据保存的全流程。通过完整的API调用代码和实战技巧,帮助研究人员和开发者高效下载全球高精度风速数据,告别繁琐的手动操作,提升工作效率。

weixin_33724059的博客 297

事件控制块的原理与创建

事件控制块两大核心功能:任务进入事件控制块等待、发生事件给控制块恢复任务运行。

daybydayby的博客 379

Gromacs基础教程一:入门建议

本系列教程针对的群体:非计算化学专业,而是偏生物方向的、有少量分子动力学模拟需求的人群。

m0_67843839的博客 8574

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8331

ucos 事件及事件控制块

1:任务间的同步 关于什么是同步直接copy一段文字解释: 其实上面说了俩种多任务之间的关系,1:多任务对同一个资源进行访问的时,必须进行共享资源之间的互斥操作。2:多个任务合作工作时,任务之间的先决条件。 2:事件 ucos中把用来通信的信号量,消息队列,消息邮箱都统一的看做为“事件”。 2.1 信号量 当信号量用来表示共享资源的数目的时候,此时的信号量为:计数新哈量。当信号

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 4487

AI Pika 生成进击的巨人动漫分镜案例

AI Pika 生成进击的巨人动漫分镜案例 Pika 是一个使用AI生成和编辑视频的平台。

独立开发,substack顶级编辑 2574

Ucos源码分析------事件控制块与事件控制

Ucos源码分析------事件控制块与事件控制

qq_43306777的博客 530

山东大学软件测试实验2——系统功能测试

​ 给出一个被测试的 Web 应用系统(SUT)。http://211.87.232.162:8080/注:友情链接不用延伸测试。针对被测试的 Web 应用系统进行功能测试,发现其存在的缺陷。 ​

m0_74033391的博客 2409

ardupilot 日志分析《xKF1信息》

ardupilot 日志分析系列将会把ardupilot所有的日志文档进行分析,为我们分析无人机的运行状态,炸鸡原因,传感器状态,电机状态,控制信息,滤波信息做准备。本节主要分析xKF1日志信息,欢迎批评指正。学习好ardupilot必须会分析飞行日志,从飞行日志中我们可以学到很多无人机的知识。无人机是综合知识的体现,涵盖:导航、控制、滤波、算法、协议等各种知识,只有更全面的学习,才能在无人机的道路上越走越远。

陌城烟雨 1225

ucosii任务间的同步与通信

ucosii任务间的同步和通信都可以通过“事件”的方式来搞定,这个事件包括:信号量、互斥量、邮箱和消息队列其中信号量和互斥量用于同步,邮箱和消息队列可用于通信。任务中有任务控制块,同样,在“事件”中有事件控制块ECBtypedef struct os_event { INT8U OSEventType; /* Type of event cont...

进步源于记录,优秀来自分享 4191

MC_SetOverride指令详细应用介绍(基恩士PLC)

基恩士KV系列PLC和松下总线绝对值伺服运动控制(详细配置+轴控完整ST源代码)

RXXW_Dor的博客 335

uCOS-II任务间通信之事件控制块 [转载]

uCOS-II任务间通信之事件控制块 信号、邮箱、消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这一东西。 那什么是事件控制块呢? 可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本

我的博客 1012

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息以及一些相关问题

天赐好车的博客 2889

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

uCOS-II任务间通信之邮箱 [转载]

uCOS-II任务间通信之邮箱 学过信号量之后再来看邮箱,发现它们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递了一个指针变量。 和信号量很相似,ucos II提供了5个对邮箱进行操作的函数。它们是: 1. 建立一个邮箱 -- OSMboxCreate() 2. 等待一个邮箱中的消息 -- OSMboxPend() 3. 发送一个消息到邮箱中 -- OS

我的博客 4272

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

uCOS-II任务间通信之信号量

uCOS-II任务间通信之信号量 信号量是什么?信号量有什么用? 信号量是可以用来表示一个或多个事件的发生,还可以用来对共享资源的访问。 uCOS-II提供了5个对信号量进行操作的函数。如下所示: 1. 建立一个信号量 -- OSSemCreate() 2. 等待一个信号量 -- OSSemPend() 3. 发送一个信号量 -- OSSemPost() 4. 无等待地请求一个信号量

root_robot的博客 923

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ucos-ii学习笔记——消息邮箱的原理及使用

ucos-ii学习笔记——消息邮箱的原理及使用   Created on: 2012-10-7       Author: zhang bin   学习笔记 for ucos-ii  PC redesigned by zhang bin 2012-10-7 versions:V-0.1 All Rights Reserved  

xu8532491的专栏 1956

ucos-II 任务间通信源码分析

ucos-II 2.0版本的任务间通信提供消息邮箱和消息队列两种机制,都基于内核的事件控制块机制实现。 消息邮箱 消息邮箱主要函数分析: 建立一个邮箱OSMboxCreate:初始化一个OS_EVENT_TYPE_MBOX类型的事件块; 向邮箱发送一个消息INT8U OSMboxPost (OS_EVENT *pevent, void *msg),该函数调用OS_EventTas...

weixin_30764883的博客 84

ucos-II 事件控制块源码分析

ucos-II 采用了事件控制块(ECB)的机制完成任务与任务、中断与任务之间的交互。并在此基础上扩展实现了信号量、互斥信号量、消息邮箱和消息队列。理解ucos-II的ECB主要看以下几方面的代码(包含在core.c中): 1. EVENT的定义: typedef struct { INT8U OSEventType; //事件控制块类型(见OS_EVENT_TYPE) ...

weixin_30532759的博客 100

ucosii之任务的同步与通信

为了把描述事件的数据结构统一起来,ucosii使用了事件控制块ECB的数据结构来描述诸如信号 量、邮箱、消息队列等事件。 任务或中断服务子程序可以通过事件控制块ECB来向另外的任务发信号。 用于通信的数据结构叫事件控制块。 对事件控制块操作的函数有4个:(XXX为信号量,邮箱或消息队列等) 事件控制块初始化函数OS_EventWaitListInit(),该函数被OSXXXCreate(

Tester_Pete 3750

uCOS-II任务间通信之信号量 [转载]

uCOS-II任务间通信之信号量 信号量是什么?信号量有什么用? 信号量是可以用来表示一个或多个事件的发生,还可以用来对共享资源的访问。 uCOS-II提供了5个对信号量进行操作的函数。如下所示: 1. 建立一个信号量 -- OSSemCreate() 2. 等待一个信号量 -- OSSemPend() 3. 发送一个信号量 -- OSSemPost() 4. 无等待地请求一个信号量

我的博客 2794

uCOS-II 总结

1、任务调度 1.调度 uCOS-II的任务由任务控制块管理,在任务每个循环的末尾通过调用OSTimeDly()或者OSTimeDlyHMSM()来将当前任务从任务就绪表移除,并将该任务控制块内OSTCBDly赋予新值,然后进行一次任务调度让出CPU控制权。 uCOS-II含有时钟节拍,时钟节拍在开中断的情况下定时触发时钟节拍中断,时钟节拍中断遍历任务控制块链表并将每个任务控制块内的OSTCBDl...

风拂寒雪_我的博客 1798
上一篇: 零欧电阻及其作用
下一篇: TCP/IP参考模型及每层所用的协议、OSI参考模型
root_robot
博客等级 码龄10年 97粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值