ucos事件控制块

信号 邮箱 消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这东西

什么是是事件控制块呢 可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储

关于这个任务重要消息,那么事件控制块就好比任务里的任务控制块,它存储这个事件重要消息,我们说,创建一个事件,其本质的过程

就是初始化这个事件控制块,一个任务或中断服务子程序可以通过事件控制块ECB来向另外的任务发信号,这里所有的信号都被看成是事件(EVENT).

一个任务还可以等待另一个任务或中断服务子程序给它发送信号,这里要注意的是,只有任务可以等待事件发生,中断服务子程序是不能这样做的

对于处于等待的任务,还可以给它指定一个最长的等待事件,以此来防止因为等待的事件没有发生而无限等待下去。

多个任务可以同时等待同一个事件的发生,这种情况下,当该事件发生后,所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪态,准备执行,上面

降到的事件,可以是信号量 邮箱或队列灯,当事件控制块是一个信号量时,任务可以等待它,它可以给它发送消息。

 

事件控制块是一个数据结构,其定义如下:

typedef struct{

 void *OSEventPtr; //指向消息或消息队列指针

 INT8U OSEventTbl[OS_EVENT_TBL_SIZE];//等待任务表

 INT16U OSEventCnt ;   //计数器

 INT8U OSEventType; //时间类型

 INT8U  OSEventGrp ;//等待任务在的组

}OS_EVENT;

 

OSEventPtr 指针,只有在定义的事件是邮箱或消息队列时才使用,当定义的事件是邮箱,它指向一个消息,当定义的是事件是消息队列时

它指向一个数据结构

OSEventTbl和OSEventGrp很像前面讲到的OSRdyTbl和OSRdyGrp,只不过前两部分的是等待事件的任务,后两者是包含的是系统中处于就绪的任务

OSEventCnt 当事件是一个信号量时,OSEventCnt是用于信号量的计数器。

OSEventType定义了事件的具体类型,它可以是信号量  邮箱 或消息队列

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值