[计算机软件及应用]第4讲嵌入式实时操作系统分析
RTOS是32位的嵌入式CPU的软件基础 RTOS内核提供CPU的管理 硬件初始化,MMU,定时器,中断 RTOS内核提供任务,内存管理 RTOS提供设备管理,文件和网络的支持 RTOS提供C/C++,JAVA,图形模块等编程接口 ?C/OS简介 1、?C/OS——Micro Controller O S,微控制器操作系统 2、 ?C/OS简介 美国人Jean Labrosse 1992年完成 应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等 1998年发布?C/OS-II,目前的版本?C/OS -II V2.8X 2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中 网站www.ucos-II.com() ?C/OS简介(续) ?C/OS –II在特定处理器上的移植工作绝大部分集中在多任务切换的实现上。因为这部分代码主要用来保存和恢复处理器现场,许多操作如读/写register不能用C语言,只能用汇编语言来完成。 将?C/OS –II移植到ARM处理器上,只需修改3个与体系结构相关的文件即可,约500行代码。3个文件是: OS_CPU_C.C OS_CPU_C.H OS_CPU_A.S ?C/OS简介(续) OS_CPU_C.H的移植 1)数据类型的定义 数据类型与所用的编译器有关;定义堆栈的单位,必须与register的长度一致。 2)退出和进入临界状态的相关宏定义 3)堆栈的增长方向定义 ?C/OS简介(续) OS_CPU_C.C的移植 1)任务堆栈的初始化 OSTaskStkInit():返回新的栈顶指针 OSTaskCreate():将SP保存在任务的OS_TCB中 OSTaskCreateExt();将SP保存在任务的OS_TCB中 2)系统hook函数 无特殊要求时为空函数,用户定义。 3)中断级任务切换函数 OSIntExit() OSExIntExit() 在时钟中断ISR(中断服务例程)中发现更高优先级任务等待时,中断退出不返回被中断的任务,而是直接调度就绪的高优先级任务执行,保证实时性。 ?C/OS简介(续) OS_CPU_A.S 1)时钟节拍中断服务函数OSTickISR() 2)退出和进入临界区函数 进入临界区前关闭中断; 退出临界区时恢复原来的中断状态。 3)任务级上下文切换函数OS_TASK_SW() 4)OSStartHighRd()函数 在OSStart()多任务启动后运行一次,负责从最高优先级任务TCB中获得SP,恢复现场并移交控制权,直到该任务被阻塞或被更高优先级任务抢占CPU。 公开源代码 可移植性(Portable) 绝大部分? C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得? C/OS-II便于移植到其他微处理器上。 ? C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处理器(DSP)上运行。 可固化(ROMable) ? C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化), ? C/OS-II可以嵌入到读者的产品中成为产品的一部分。 可裁剪(Scalable) 可以只使用? C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个? C/OS-II调用,而另一个产品则使用了几乎所有? C/OS-II的功能,这样可以减少产品中的? C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。 占先式(Preemptive) 多任务 ?C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务 可确定性 全部? C/OS-II的函数调用与服务的执行时间具有可确定性。 任务栈 每个任务有自己单独的栈, ? C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。 系统服务 ?C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。 中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。 稳定性与可靠性 μC/OS-II图书 描述
原创力文档

文档评论(0)