ucos 事件控制块 及 处理函数

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可直接向任务 阅读详情

一.时间控制块ECB的数据结构
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16U OSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;

.OSEventType ECB类型 有以下几种:
#define OS_EVENT_TYPE_UNUSED 0
#define OS_EVENT_TYPE_MBOX 1
#define OS_EVENT_TYPE_Q 2
#define OS_EVENT_TYPE_SEM 3
#define OS_EVENT_TYPE_MUTEX 4
#define OS_EVENT_TYPE_FLAG 5


.OSEventCnt 信号量计数 表示最大空共享的数目


.*OSEventPtr 用于消息和队列


.OSEventTbl[] 和 .OSEventGrp
分别与管理任务的OSRdyTbl[] 和 OSRdyGrp 类似,OSEventTbl[]用于放置该事件的所有等待任务。原理图如下:

ucos <wbr>事件控制块 <wbr>及 <wbr>处理函数
二、将任务置于等待事件的任务列表
pevent->OSEventGrp |= OSMapTbl[prio >> 3];
pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

ucos <wbr>事件控制块 <wbr>及 <wbr>处理函数

三、从等待任务列表中删除一个任务
if ((pevent->OSEventTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0) {
pevent->OSEventGrp &= ~OSMapTbl[prio >> 3];
}

四、在等待任务列表中查找最高优先级的任务
y = OSUnMapTbl[pevent->OSEventGrp];
x = OSUnMapTbl[pevent->OSEventTbl[y]];
prio = (y << 3) + x;

五、空余事件控制块链表
在调用OSInit()时,所有事件控制块被链接成一个单向链表——空闲事件控制块链表。每当建立一个信号量、邮箱或者消息队列时,就从该链表中取出一个空闲事件控制块,并对它进行初始化。删除时,可将事件控制块放回到空余事件控制块链表中。

ucos <wbr>事件控制块 <wbr>及 <wbr>处理函数

六、初始化一个事件控制块,OS_EventWaitListInit()
就是将该ECB中的.OSEventTbl[] 和 .OSEventGrp 全部清0 

七、使一个任务进入就绪态,OS_EventTaskRdy()

先从等待任务列表中删除这个任务:
if ((pevent->OSEventTbl[y] &= ~bitx) == 0x00) {
pevent->OSEventGrp &= ~bity;
}

ucos <wbr>事件控制块 <wbr>及 <wbr>处理函数

再将这个任务置于任务就绪表:
if (ptcb->OSTCBStat == OS_STAT_RDY) {
OSRdyGrp |=bity;
OSRdyTbl[y] |= bitx;
}


八、使一个任务进入等待某事件发生状态,OS_EventTaskWait()

将任务移出就绪表

if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
}

将任务进入该事件的等待列表
pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;

有了这些基本知识,后面的事件处理就简单多了

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

相关推荐

深入理解uCOS-II内核之任务

0. 阐述对任务的理解,对比任务与C函数的异同点。 从代码上看,uCOS-II的任务就是一个函数。但是只是采用函数的形式,仅仅借用了函数的一些特性,用函数来来存储代码而已。它不是通过不同的代码来区分不同的任务,而是通过不同的任务堆栈和不同的任务优先级来进行区分。类似与C++和JAVA中的函数重载。 例如,我们可以创建10个任务的任务代码的指针都是Task,这意味着这10个任务共用一段代码,但它们有不

苏磊的博客 5025

YUI 3: YUI Global Object

YUI3模块已经发布,配套的工具及部件虽然现在还不全,但也计划于2010年全部推出,本人感觉YUI功能比较全面,而且有比较详细的文档,所以一直比较关注,这是本人学习YUI文档的一系列笔记。YUI模块是YUI3中的单一核心,所有需要使用YUI3的页面都必须包含该模块,该模块提供加载功能,可以使用该功能动态加载指定模块,其依赖模块会被自动加载,所以YUI模块

decentway的专栏 2876

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 260

android SQLiteDatabase attempt to re-open an already-closed object:

08-23 16:05:54.900: E/AndroidRuntime(14178): FATAL EXCEPTION: Thread-38948 08-23 16:05:54.900: E/AndroidRuntime(14178): java.lang.IllegalStateException: attempt to re-open an already-closed object: S

hhbbeijing的专栏 5193

告别色差!用Python+TCS34725颜色传感器实现精准色彩还原(附完整校准代码)

本文详细介绍了如何利用Python和TCS34725颜色传感器实现专业级色彩还原方案。通过双阶校准法(白光校准和黑电平校准)和进阶的光照自适应技术,解决传感器原始数据不准的问题,并提供完整的校准代码和实战案例,帮助开发者实现ΔE<3的高精度色彩识别。

weixin_30836759的博客 209

使用PaddleOCR识别查验平台验证码

PaddleOCR识别国税查验平台验证码

m0_63932300的博客 1268

scala之模式匹配

匹配字符串 import scala.util.Random object CaseDemo1 { val arr = Array("YoshizawaAkiho", "YuiHatano", "AoiSola") val name: String = arr(Random.nextInt(arr.length)) println(s"name is:$name") name match { case "YoshizawaAkiho" => println("吉泽")

reddy_Hu的博客 3099

自抗扰(ADRC)控制原理及控制器设计

自抗扰控制原理以及控制器设计

weixin_43487974的博客 3万+

Android---37---SQLiteDatabase

Android提供了SQLDatabase代表一个数据库 (底层就是一个数据库文件) 静态方法打开一个文件对应的数据库: static SQLiteDAtabase openDatabase (String path,SQLiteDatabase.Cursor Factory factory ,int flags) 打开path文件所代表的SQL数据库。 sta

bobo 2166

读书笔记:深度学习入门-基于python的理论与实现(俗称鱼书)

终于从头到尾把鱼书看完啦,真的是非常入门,非常查漏补缺,对新手很友好,对有一定基础的人也非常不错。看完不复习等于没看,所以今天开始复盘,顺便写这篇读书笔记。希望分享给没看过这本书或者看过这本书的同僚们参考,欢迎大家指教。我将从第三章神经网络开始复习,前两章内容书里已经非常基础and清楚了。(会持续更新滴).........

博客而已 1万+

【大模型工程局】告别单打独斗:手把手带你构建多智能体系统(MetaGPT 启示录)

想象一下,不再是只有一个全知全能的 AI,而是有一群各有所长、能够独立思考和行动的“智能体”(Agent)。它们生活在一个共同的环境中,可以相互交流、协作完成共同目标,也可能为了有限资源而相互竞争。这就是多智能体系统(MAS)的核心图景。MAS 的关键特征:自治性 (Autonomy):每个智能体都能独立感知环境、做出决策并执行动作,无需外部直接控制。交互性 (Interaction):智能体之间可以通过某种通信机制(显式或隐式)交换信息、协调行为。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1184

03.Scala高级特性 ---没看

Scala高级特性 1.课程目标 1.1.目标一:深入理解高阶函数 1.2.目标一:深入理解隐式转换 2.高阶函数 2.1.概念 Scala混合了面向对象和函数式的特性,我们通常将可以做为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。 2.2.作为值的函数 可以像任何其他数据类型一样被传递和操作的函数...

okbin1991的博客 3823

ardupilot 日志分析《xKF1信息》

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

陌城烟雨 1225

uCOS II 之事件控制块学习

一。 事件控制块ECB数据结构:   typedef struct   {   INT8U OSEventType; //事件类型   INT8U OSEventGrp; //等待任务所在的组   INT16U OSEventCnt; //当事件是信号量时的计数器   void *OSEventPtr; //指向消息或消息队列的指针   INT8U OSE

芝麻软件工作室的专栏 541

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码)

uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd

✅ 精选推荐文章 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【UCOSii源码解析】事件控制块

文章目录(一)事件控制块(二)事件控制块的工作模式将一个任务插入一个事件的等待队列中将一个任务从任务链表中删除在等待任务列表中查找最高优先级的任务(三)任务控制块的产生初始化一个事件控制块,OSEventWaitListInit()使一个任务进入就绪态使一个任务进入等待状态 (一)事件控制块 这个任务控制块指向的任务,用的是位图的数据结构,并非是链表。 typedef struct os_event { INT8U OSEventType; /*事件类型

yy197696的博客 1509

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

我的博客 1012

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ucos 事件及事件控制块

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

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

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

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

qq_43306777的博客 530

事件控制块

事件控制块 任务或中断服务子程序可以通过ecb向另外的任务发信号。事件:信号!!!控制块:数据结构!!!事件等待列表,类似于就绪表。当一个事件发生后,处于事件等待列表中的优先级最高的任务得到该事件 一.   事件控制块ECB数据结构:typedef struct{ INT8U   OSEventType; //事件类型 INT8U   OSEventGr

千里冰封 2578

STM32单片机uCOS-Ⅲ系统6 事件

介绍了事件的基本概念、应用场景、运作机制、控制块、函数接口与相关实现

陌夏微秋的博客 1390

Ucos源码分析------任务控制块与任务调度

Ucos源码分析------任务控制块与任务调度

qq_43306777的博客 915

ucos-iii事件控制块结构

μC/OS的事件由多个元素组成,在事件被创建时,需要由我们自己定义事件(也可以称之为事件句柄),因为它是用于保存事件的一些信息的, 其数据结构OS_FLAG_GRP除了事件必须的一些基本信息外,还有PendList链表与一个32位的事件组变量Flags等,为的是方便系统来管理事件。:因为可以有多个任务同时等待系统中的事件, 所以事件中包含了一个用于控制挂起任务列表的结构体,用于记录阻塞在此事件上的任务。这个变量可以为8位,16位或32位。:事件的类型,用户无需理会,μC/OS用于识别它是一个事件。

flyflyfly12345的博客 440

uCOS-II内核之任务控制块 [转载]

uCOS-II内核之任务控制块 前面的学习已经了解过任务控制块。知道任务在创建的时候,任务控制块会被初始化。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,ucos II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。OS­­_TCBs全部驻留在RAM中。   任务控制块的定义程序如下所示: #if OS_TASK_

我的博客 849

UCOS2系统内核讲述(三)_TCB任务控制块

Ⅰ、写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32F1移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数   上一篇文章讲述了关于OSInit函数体中几个关于系统内核重要的函数,本文将针对上一篇文章中OS_InitTCBList(初始化任务控制块)函数重点讲述一下TCB(Task Control Bloc

strongerHuang 5773

uCOS-II内核之任务控制块

uCOS-II内核之任务控制块 前面的学习已经了解过任务控制块。知道任务在创建的时候,任务控制块会被初始化。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,ucos II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。OS­­_TCBs全部驻留在RAM中。   任务控制块的定义程序如下所示: [cpp

root_robot的博客 575
上一篇: yaffs2源代码情景分析
下一篇: uCOS-II学习笔记(一)
abc94
博客等级 码龄15年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值