嵌入式操作系统内核原理和开发(事件)

嵌入式操作系统内核原理和开发(事件)

ID:33941030

大小:439.03 KB

页数:8页

时间:2019-02-28

嵌入式操作系统内核原理和开发(事件)_第1页
嵌入式操作系统内核原理和开发(事件)_第2页
嵌入式操作系统内核原理和开发(事件)_第3页
嵌入式操作系统内核原理和开发(事件)_第4页
嵌入式操作系统内核原理和开发(事件)_第5页
资源描述:

《嵌入式操作系统内核原理和开发(事件)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处嵌入式操作系统内核原理和开发(事件)在很多操作系统的书上,其实互斥和同步是放在一起进行介绍的。互斥,比较简单,就是对某一份资源或者几份资源进行抢占获取。而同步是什么意思呢,就是某一个线程等待另外一个线程的通知,只有收到了通知,它才会去干某些事情。通常情况下,如果是抢占的话,那么两个人使用的必须是同一个锁,而同步的话,则需要好几个锁,因为一般情况下大家等待的东西都是不一样的,所以好几个锁是不可避免的。那么,有没有什么办法

2、,可以用一个锁实现几个事情的并发和同步呢?这就是我们今天所要说的事件。可以从一个例子说明一下。比方说,我们现在打算进行八宝饭的烹饪。那么,在此之前需要进行各个辅料的准备工作,等到这些辅料都准备好了,就可以开始煮八宝饭了。因为辅料之间是相互独立的,所以完全可以分开独立完成,而在所有辅料都没有完成之前,我们只能等待。等到材料全部准备好,我们就可以开始烹饪的工作了。当然,在烹饪的时候,我们又可以准备进行下一轮工作了,也就是说进行下一次八宝饭的辅料准备。在这个地方,辅料的准备是由各个子线程完成的,而煮饭

3、这个工作是主线程完成的,主线程和子线程之间就是通过事件进行沟通的。主线程需要知道当前各个材料准备好了没,而子线程需要知道八宝饭烧好了没,是不是该进行下一轮辅料的准备了。这个中间就存在一个同步的问题了。如果大家对之前的信号量还有印象的话,当初我们是用count来表示资源的个数。而今天,我们用flags来表示事件状态,而其中的bit则表示了一个一个具体的事件。只不过有的线程在等待多个事件,而有的线程在等待一个事件,有的线程在获取事件后bit位立即清除,有的线程在获取事件后继续留存。所以下面,我们就看

4、看raw-os上面的事件是怎么设计的。当然,我们首先看到的还是关于事件的基本数据结构,[cpp]viewplaincopy1.typedefstructRAW_EVENT2.{3.RAW_COMMON_BLOCK_OBJECTcommon_block_obj;4.RAW_U32flags;5.6.}RAW_EVENT;7.8.这和我们之前介绍的没什么不一样,就是通用结构加上flag标志。关于事件的基本处理函数也不复杂,主要就是创建、申请、设置和删除四个基本操作。我们来看看每一步分别是怎么实现的,

5、首先介绍的还是事件的创建过程,[cpp]viewplaincopy本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处1.RAW_U16raw_event_create(RAW_EVENT*event_ptr,RAW_U8*name_ptr,RAW_U32flags_init)2.{3.#if(RAW_EVENT_FUNCTION_CHECK>0)4.5.if(event_ptr==0){6.7.

6、returnRAW_NULL_OBJECT;8.}9.10.#endif11.12./*Initthelist*/13.list_init(&event_ptr->common_block_obj.block_list);14.event_ptr->common_block_obj.block_way=0;15.event_ptr->common_block_obj.name=name_ptr;16.event_ptr->flags=flags_init;17.18.returnRAW_SUCC

7、ESS;19.}20.看了代码,相信要说的部分不是很多,关键就是flags的赋值部分,其他的都和信号量差不太多。这里的flags代表了某一个起始状态,也就是说当前可以干什么事情、满足哪些条件等等。下面,我们继续看事件的获取函数,稍微复杂一些,[cpp]viewplaincopy1.RAW_U16raw_event_get(RAW_EVENT*event_ptr,RAW_U32requested_flags,RAW_U8get_option,RAW_U32wait_option)2.{3.RAW_

8、U16error_status;4.5.RAW_U8status;6.RAW_SR_ALLOC();7.8.#if(RAW_EVENT_FUNCTION_CHECK>0)9.10.if(raw_int_nesting){11.12.returnRAW_NOT_CALLED_BY_ISR;13.14.}15.本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处16.if((get_option!=R

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。