uCOS操作系统及其移植_第1页
uCOS操作系统及其移植_第2页
uCOS操作系统及其移植_第3页
uCOS操作系统及其移植_第4页
uCOS操作系统及其移植_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UCOS-ii操作系统及其移植一一 操作系统简介操作系统简介二 UCOS-ii操作系统操作系统三 操作系统的移植操作系统的移植四 UCOS-ii向向430中移植中移植操作系统是一种为应用程序提供服务的系统软件,是一个完整计算机系统的有机组成部分。从层次来看,操作系统位于计算机硬件之上,应用软件之下。所以也把它叫做应用软件的运行平台。什么是计算机操作系统 (Operating System,OS)它在计算机应用程序与计算机硬件系统之间,屏蔽了计算机硬件工作的一些细节,并对系统中的资源进行有效的管理。通过提供函数(应用程序接口(API),从而使应用程序的设计人员得以在一个友好的平台上进行应用程序的

2、设计和开发,大大地提高了应用程序的开发效率。 计算机操作系统的作用从用户的角度来看,它就是一大堆函数(API和系统函数),用户可以调用(普通调用或系统调用)它们来对系统资源进行操作。计算机硬件用汇编语言编写的硬件抽象层高级语言的接口应用软件操作系统操作系统计算机操作系统的功能处理器的管理存储管理网络和通信的管理I/O设备管理文件管理任务管理任务表存储分配表文件目录设备表 总之,需要一大堆表 操作系统的分类操作系统实时系统分时系统C/OS简介nC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。n严格地说uC/OS-II只是一个实时操作系统内核nC/OS-I

3、I 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。nC/OS-II 的前身是C/OS,最早由美国人Jean Labrosse 1992年完成。C/OS-II已经移植到了几乎所有知名的CPU 上。2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中。n网站www.ucos-II.com()C/OS-II的组成部分的组成部分核心部分(OSCore.c)任务处理部分(OSTask.c)时钟部分(OSTime.c)任务同步和通信部分与CPU的接口部分C/OS-II的组成部分(续)的组成部分(续)核心部分是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时

4、钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。 任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等时钟部分即产生时钟节拍。任务延时等操作是在这里完成的。C/OS-II的组成部分(续)的组成部分(续)任务同步和通信部分为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。与CPU的接口部分是指C/OS-II针对所使用的CPU的移植部分。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处

5、理部分等内容。 C/OS-II的应用流程的应用流程开启多任务调度, 操作系统启动创建用户任务设置系统节拍删除初始任务板级初始化创建初始任务C/OS-II的初始化,创建空闲任务C/OS-II的初始化在使用C/OS-II的所有服务之前,必须要调用C/OS-II的初始化函数OSInit( )对C/OS-II自身的运行环境进行初始化。 函数OSInit( )将对C/OS-II的所有的全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋之以最低的优先级别和永远的就绪状态。如果用户应用程序还要使用统计任务的话(常数OS_TASK_STAT_EN=1),则OSInit( )还要以优先级别

6、为OS_LOWEST_PRIO-1来创建统计任务 初始化函数OSInit( )对数据结构进行初始化时,主要要创建包括空任务控制块链表等空数据缓冲区。同时,为了可以快速地查询任务控制块链表中的各个元素,初始化函数OSInit( )还要创建一个数组OSTCBPrioTblOS_LOWEST_PRIO + 1,在这个数组中,按任务的优先级别的顺序把任务控制块的指针存放在了对应的元素中 系统提供的空闲任务 在多任务系统运行时,系统经常会在某个时间内无用户任务可运行而处于所谓的空闲状态,为了使CPU在没有用户任务可执行的时候有事可做,C/OS-II提供了一个叫做空闲任务OSTaskIdle( )的系统任

7、务 void OSTaskIdle(void* pdata)# if OS_CRITICAL_METHOD = = 3OS_CPU_SR cpu_sr;#endif pdata = pdata;/防止某些编译器报错for(;)OS_ENTER_CRITICAL( );/关闭中断OSdleCtr+;/计数OS_EXIT_CRITICAL( );/开放中断 空闲任务只是做了一个计数工作C/OS-II规定,一个用户应用程序必须使用这个空闲任务,而且这个任务是不能用软件来删除的 系统提供的另一个任务 统计任务C/OS-II提供的另一个系统任务是统计任务OSTaskStat( )。这个统计任务每秒计算一

8、次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便应用程序通过访问它来了解CPU的利用率,所以这个系统任务OSTaskStat( )叫做统计任务 任务创建 的一般方法 一般来说,任务可以在调用函数OSStart( )启动任务调度之前来创建,也可以在任务中来创建。但是,C/OS-II有一个规定:在调用启动任务函数OSStart( )之前,必须已经创建了至少一个任务。因此,人们习惯上在调用函数OSStart( )之前先创建一个任务,并赋予它最高的优先级别,从而使它成为起始任务。然后在这个起始任务中,再创建其他各任务。如果要使用系统提供的统计任务,则统计

9、任务的初始化函数也必须在这个起始任务中来调用 void main(void)OSInit( );/对C/OS-II进行初始化OSTaskCreate (TaskStart,);/创建任务TaskStartOSStart( );/开始多任务调度 void TaskStart(void*pdata)/在这个位置安装并启动C/OS-II的时钟OSStatInit( );/初始化统计任务/在这个位置创建其他任务for(;)起始任务TaskStart的代码 OSTaskCreate( )函数 应用程序通过调用OSTaskCreate( ) 函数来创建一个任务,OSTaskCreate( )函数的原型如下

10、: INT8U OSTaskCreate ( void (*task)(void *pd),/指向任务的指针 void *pdata, /传递给任务的参数 OS_STK *ptos, /指向任务堆栈栈顶的指针 INT8U prio/任务的优先级)C/OS-II的启动C/OS-II进行任务的管理是从调用启动函数OSStart( )开始的,当然其前提条件是在调用该函数之前至少创建了一个用户任务 调度时机很容易想到的调度时机就是定时调度。C/OS-II与大多数计算机系统一样,用硬件定时器产生一个周期为ms级的周期性中断来实现系统时钟,最小的时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时

11、钟节拍(Time Tick)。硬件定时器以时钟节拍为周期定时地产生中 断 , 该 中 断 的 中 断 服 务 程 序 叫 做OSTickISR( )。中断服务程序中会调用任务切换函数来进行任务切换。对于实时系统来说,应该尽可能地实现即时调度。一般任务结束调用函数OSPost ( ) 发送一个事件时,函数OS_EventTaskRdy ( )将被函数OSPost ( )所调用。该函数的作用就是把等待OSPost ( )所释放事件的任务在任务等待表中的位置清0(解除等待状态)后,再把该任务在任务就绪表中对应的位置1,然后引发一次任务调度。C/OS-II系统响应中断,当中断服务子程序的运行结束后,系

12、统将会根据情况返回到被中止的任务继续运行或者转向运行另一个具有更高优先级别的就绪任务。注意!中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而并不是一定要接续运行被中断的任务的。信号量及其操作 在使用信号量之前,应用程序必须调用函数OSSemCreate( )来创建一个信号量,OSSemCreate( )的原型为: OS_EVENT *OSSemCreate (INT16U cnt/信号量计数器初值); 函数的返回值为已创建的信号量的指针。 任务通过调用函数OSSemPend( )请求信号量,函数OSSemPend( )的原型如下: void OSSe

13、mPend ( OS_EVENT *pevent,/信号量的指针 INT16U timeout, /等待时限INT8U *err);/错误信息 参数pevent是被请求信号量的指针。为防止任务因得不到信号量而处于长期的等待状态,函数OSSemPend允许用参数timeout设置一个等待时间的限制,当任务等待的时间超过timeout时可以结束等待状态而进入就绪状态。如果参数timeout被设置为0,则表明任务的等待时间为无限长。任务获得信号量,并在访问共享资源结束以后,必须要释放信号量,释放信号量也叫做发送信号量,发送信号量需调用函数OSSemPost ( )。OSSemPost ( )函数在对

14、信号量的计数器操作之前,首先要检查是否还有等待该信号量的任务。如果没有,就把信号量计数器OSEventCnt加一;如果有,则调用调度器OS_Sched( )去运行等待任务中优先级别最高的任务。函数OSSemPost ( )的原型为: INT8U OSSemPost (OS_EVENT *pevent /信号量的指针); 调用函数成功后,函数返回值为OS_ON_ERR,否则会根据具体错误返回OS_ERR_EVENT_TYPE、OS_SEM_OVF。 应用程序如果不需要某个信号量了,那么可以调用函数OSSemDel( )来删除该信号量,这个函数的原型为: OS_EVENT *OSSemDel (O

15、S_EVENT *pevent, /信号量的指针INT8U opt, /删除条件选项INT8U *err/错误信息); uC/OS-II的移植移植就是修改一个软件,使得它能在新的环境下(不同的处理器平台,或者不同的处理器型号,或者不同的板子,或者不同的系统下)运行移植工作量取决于被移植软件的复杂程度和移植的层次举例将linux移植到alpha处理器上,属于第一类:移植到新的处理器架构上。工作量巨大,非高手不能为将linux移植到s3c2410上,属于第二类:移植到不同处理器型号。工作量大大降低将linux移植到你开发的开发板上,属于第3类:移植到不同board上,如果你的board采用了如s3

16、c2410这样的处理器,则工作量很小将QQ移植到linux平台上,属于第四类,把软件移植到不同的系统(操作系统)上移植一个操作系统与什么有关?不考虑应用程序的移植,只考虑操作系统移植到不同平台上。主要的工作体现在:理解处理器架构(寄存器,指令集,编程模式)了解board的硬件设计(内存基地址?Flash地址?使用了处理器哪些资源?)了解编译器(编译器传递参数的约定,支持内嵌汇编否?)当然,理解操作系统的设计C/OS-II的移植Ucosii相对简单,移植工作量不大。实现三个文件: os_cpu.h os_cpu_c.c os_cpu_a.s移植C/OS-II满足满足的条件处理器的C编译器能产生可

17、重入代码在程序中可以打开或者关闭中断处理器支持中断,并且能产生定时中断处理器支持能够容纳一定量数据的硬件堆栈(可能达几KB)处理器有将堆栈指针和其他的寄存器存储和读出到堆栈(或者内存)的指令可重入代码是一段代码(一般指函数)可以同时被多个任务调用而不会担心数据会被破坏。用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。可重入的代码的实现主要是编程技术,所有嵌入式集成开发环境都能产生可重入的代码。int temp;void Swap(int x, int y) temp =

18、x; x=y; y = temp如果任务 A 和任务 B 都要调用函数Swap() ,而该函数又使用了全局变量 temp 。于是当任务 A 调用 Swap() 函数期间,系统发生了任务切换而使任务 B 也调用了 Swap() ,那么任务 B 将要改变全局变量 temp 的值,使任务 A 传递给全局变量 temp 的值丢失而出现错误。一般来说,一个可重入函数应该在函数中只使用局部变量,因为函数的局部变量存储在任务的堆栈中,所以可保证不同的任务在调用同一个函数时不会发生冲突。C/OS-II的文件结构的文件结构Os_cpu.h主要定义通用的数据类型和堆栈增长方式,确定OS_ENTER/EXIT_CRITICAL的实现方式数据类型是编译器相关的,堆栈增长方式是处理器相关的Os_cpu_c.c主要实现堆栈初始化函数OSTaskSt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论