- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
WhatisuC/OS?u:MicroC:controluC/OS:适合于小的、控制器的操作系统小巧公开源代码,详细的注解可剥夺实时内核可移植性强多任务确定性TheStoryofuC/OS美国人JeanLabrosse1992年编写的商业软件的昂贵应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等μCOS不但提供了一个完整的嵌入式实时内核的源代码,而且对这些代码的细节作了详尽的解释,它不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。而商业上的实时操作系统软件不但价格昂贵(一般都在5千到2万美元的价位上),而且其中很多都是所谓黑盒子,即不提供源代码。l源代码的绝大部分是用C语言写的,经过简单的编译,读者就能在PC机上运行,边读书、边实践。由于用汇编语言写的部分只有200行左右,该实时内核可以方便地移植到几乎所有的嵌入式应用类CPU上。移植范例的源代码可以从因特网上下载。l从最老版本的实时内核μCOS,以及后来的μC/OS,到新版本的μC/OS-II,已经有多年的历史。许多行业上都有成功应用该实时源代码.实时内核移植.内核实时内核的实例,这些应用的实践是该内核实用性、无误性的最好证据。概要内核结构-任务以及调度机制任务间通信uC/OS的移植在PC机上运行uC/OS任务task典型的一个无限循环。voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}}支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小系统占用了两个任务,空闲任务和统计任务。任务优先级每个任务按其重要性被赋予一定的优先级。μC/OS-Ⅱ可以管理多达64个任务,但目前版本的μC/OS-Ⅱ有两个任务已经被系统占用了。作者保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用。OS_LOWEST_PRI0是作为定义的常数在OS_CFG.H文件中用定义常数语句#defineconstant定义的。因此用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级,优先级可以从0到OS_LOWEST_PR10-2。优先级号越低,任务的优先级越高。μC/OS-Ⅱ总是运行进入就绪态的优先级最高的任务。目前版本的μC/OS-Ⅱ中,任务的优先级号就是任务编号(ID)。优先级号(或任务的ID号)也被一些内核服务函数调用,如改变优先级函数OSTaskChangePrio(),以及任务删除函数OSTaskDel()。任务状态休眠态(dormant):指任务驻留在程序空间中,还没有交给内核管理。把任务交给内核是通过调用OSTaskCreate()或OSTaskCreatExt()实现的。就绪(Ready):当任务一旦建立,这个任务就处于就绪态准备运行。任务可以动态的被另一个程序建立,也可以在系统运行开始之前建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。通过调用OSTaskDel()使任务返回到休眠态。就绪态的任务都放在就绪列表中。在任务调度时,指针OSTCBHighRdy指向优先级最高的就绪任务,也就是立刻就要运行的任务。运行(Running):准备就绪的最高优先级的任务获得CPU的控制权,从而处于运行态。指针OSTCBCur指向正在运行的任务。等待或挂起(Pending):正在运行的任务由于调用延时函数OSTimeDly()或等待事件信号量的来临而将自身挂起,因而处于等待或挂起态。因为等待某事件而被挂起的任务注册在该事件的等待列表中。中断态(Interrupt):正在运行的任务可以被中断,除非是该任务将中断关闭。被中断的任务进入中断服务程序(ISR)。如果中断服务程序使一个更高优先级的任务准备就绪,则中断服务程序结束后,更高优先级的任务开始运行程序。任务堆栈在μC/OS-Ⅱ中,每个任务都有自己的堆栈空间。为方便使用,在μC/OS-Ⅱ中专门定义了一个OS_STK类型的数据,这样在应用程序中定义任务的堆栈就非常方便。例如:程序8?5#defineTASK_STK_SIZE200OS_STKTaskStartStk[TASK_STK_SIZE];新任务TCB(1)TCB0TCB1TCBnnextpre空(2)(3)OSTCBFreeList图4.3TCB的双向链表结构任务的数据结构—任务控制块任务控制块OS_tcb,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。所
文档评论(0)