欢迎来到天天文库
浏览记录
ID:33941602
大小:466.03 KB
页数:7页
时间:2019-02-28
《嵌入式操作系统内核原理和开发(信号量)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处嵌入式操作系统内核原理和开发(信号量)之前因为工作的原因,操作系统这块一直没有继续写下去。一方面是自己没有这方面的经历,另外一方面就是操作系统比较复杂和琐碎,调试起来比较麻烦。目前在实际项目中,使用的实时操作系统很多,很多国内的朋友也写过操作系统,有些项目现在还在维护和修改中,这是十分难得的。就我知道和熟悉的就有三个系统,比如(1)RT-THREAD(2)RAW-OS(3)ClearRTOS这里有比较介绍一下,这三个系统是国内的三位朋友开发的。其中rt-thread时间比较
2、久一点,模块也比较全,bsp、cpu、fs、lwip、gui等辅助的代码也比较多,有兴趣的朋友可以到网站上面下载代码看一看。raw-os是我今年才发现的一个实时系统,从网站的注册时间和软件版本号上来看,系统开发的时间不是很长,不过整个系统代码的结构非常清晰,是我重点推荐阅读的代码。如果朋友们自己download下来,好好看一下其中的代码,肯定会有不少的收获。最后一个代码是作者李云在编写《专业嵌入式软件开发》这本书的时候,为了说明os的基本原理而开发的软件,前后设计了线程、互斥、内存、定时器、驱动框架等内容,值得一读。当然有了这么多优秀的代码,我觉得现
3、在自己的工作就不是重新造一个车轮了,而是和大家分享这些优秀的代码是如何设计的。理解代码本身不是目的,关键是理解代码背后的基本思路。就我个人看过来,rt-thread和raw-os都可以用来学习,不过raw-os更好一些,主要是因为作者将raw-os移植到的vc上面,学起来也十分方便,要是个人在使用过程中有什么疑问,可以通过邮件和作者及时交流。不过由于raw-os的版本在一直在update之中,所以部分代码在前后稍微有点差别,不过这些都不是重点,暂时不了解的内容可以通过后面的了解和学习逐步掌握,不会成为太大的障碍。就像今天的题目一样,我们重点介绍一下信
4、号量的设计原理。首先看一下信号量的数据结构是怎么样的,[cpp]viewplaincopy1.typedefstructRAW_SEMAPHORE2.{3.RAW_COMMON_BLOCK_OBJECTcommon_block_obj;4.RAW_U32count;5.6.}RAW_SEMAPHORE;这些代码都是从raw-os上面摘抄下来的,这个版本是0.94版本,和最新的0.96c版本有点差别。首先分析一下信号量的基本结构,其实非常简单,就两个变量,其中本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科
5、医院http://tf463.com/收集,转载请注明出处comm_block_obj是一个通用类型,记录了当前结构的名称、类型和阻塞队列,而count就是计数,判断是否还有释放的资源。说到了信号量的操作,无非就是信号量的创建、获取、释放、删除操作,当然这里作者考虑的比较详细,在信号量释放的时候还分成了WAKE_ONE_SEM和WAKE_ALL_SEM两种类型。意思很简单,就是当信号量来临的时候是唤醒一个等待线程呢,还是唤醒所有的等待线程呢,就是这么回事。下面,我们就按照顺序介绍这几个函数,首先是创建函数,[cpp]viewplaincopy1.RA
6、W_U16raw_semaphore_create(RAW_SEMAPHORE*semaphore_ptr,RAW_U8*name_ptr,RAW_U32initial_count)2.{3.#if(RAW_SEMA_FUNCTION_CHECK>0)4.5.if(semaphore_ptr==0){6.7.returnRAW_NULL_OBJECT;8.}9.10.if(initial_count==0xffffffff){11.12.returnRAW_SEMOPHORE_OVERFLOW;13.14.}15.16.#endif17.18./*I
7、nitthelist*/19.list_init(&semaphore_ptr->common_block_obj.block_list);20.21./*Initresource*/22.semaphore_ptr->count=initial_count;23.24.semaphore_ptr->common_block_obj.name=name_ptr;25.26.semaphore_ptr->common_block_obj.block_way=0;27.28.returnRAW_SUCCESS;29.30.}看着初始化函数,我们发现信号量
8、的初始化其实也非常简单,基本工作主要有:本文由吉林白癜风医院http://tf463.com/收集,转载请注
此文档下载收益归作者所有