嵌入式操作系统μC OS-II

上传人:ji****72 文档编号:48518860 上传时间:2018-07-16 格式:PPT 页数:74 大小:1.04MB
返回 下载 相关 举报
嵌入式操作系统μC OS-II_第1页
第1页 / 共74页
嵌入式操作系统μC OS-II_第2页
第2页 / 共74页
嵌入式操作系统μC OS-II_第3页
第3页 / 共74页
嵌入式操作系统μC OS-II_第4页
第4页 / 共74页
嵌入式操作系统μC OS-II_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《嵌入式操作系统μC OS-II》由会员分享,可在线阅读,更多相关《嵌入式操作系统μC OS-II(74页珍藏版)》请在金锄头文库上搜索。

1、 嵌入式技术与应用智能电器与智能系统省重点实验室嵌入式操作系统C/OS-II6C H A P T E R主要内容 嵌入式操作系统 C/OS-简介 C/OS-内核结构 C/OS-任务管理 C/OS-时间管理 C/OS-任务通信与同步 C/OS-的移植规划 C/OS-的移植 移植代码应用到LPC2000为什么需要操作系统硬件抽象层的引入 嵌入式实时系统自底向上包含三个部分 硬件环境 嵌入式实时操作系统RTOS 嵌入式实时应用程序 嵌入式系统应用的硬件环境差异大 中间层位于操作系统和硬件之间,包含系 统中与硬件相关的大部分功能嵌入式系统的体系结构嵌入式操作系统的发展操作系统内核应用程序驱动程序和固件

2、操作系统内核文件系统驱动程序和固件APIGUI应用程序操作系统内核文件系统驱动程序和固件APIGUI应用程序通信协议库函数80年代初期80年代中期-90年代中期90年代末期-21世纪RTOS在嵌入式系统中的位置嵌入式硬件平台BSPKERNELFSTCP/IP设备驱动设备I/O调试工具其它组件应用RTOSC/C+主要内容 嵌入式操作系统 C/OS-简介 C/OS-内核结构 C/OS-任务管理 C/OS-时间管理 C/OS-任务通信与同步 C/OS-的移植规划 C/OS-的移植 移植代码应用到LPC2000C/OS-II简介 概述C/OS-II是源码公开的著名实时内核,可用 于各类8位、16位和3

3、2位单片机或DSP。 C/OS-II是一个完整的、可移植、可固化、 可剪裁的占先式实时多任务内核。C/OS-II使用 ANSI C语言编写,包含一小部分汇编代码,使之 可以供不同架构的微处理器使用 C/OS-II特点提供源代码:源代码全部开放。可移植性(portable):源代码绝大部分使用ANSI C编写,将与微 处理器硬件相关的汇编语言使用量压缩到最低的限度,方便移植。可固化(ROMmable):具备合适的软硬件工具,就可以将C/OS-II 嵌入到产品中成为产品的一部分。可剪裁(scalable):使用条件编译实现可剪裁,减少C/OS-II对 代码空间和数据空间的占用。可剥夺(preemp

4、tive):完全可剥夺型的实时内核,C/OS-II总是 运行就绪条件下优先级最高的任务。C/OS-II的各种商业应用 全世界有数百种产品在应用: Avionics Medical Cell phones Routers and switches High-end audio equipment Washing machines and dryers UPS (Uninterruptible Power Supplies) Industrial controllers GPS Navigation Systems Microwave Radios Instrumentation Point-of

5、-sale terminals 更多主要内容 嵌入式操作系统 C/OS-简介 C/OS-内核结构 C/OS-任务管理 C/OS-时间管理 C/OS-任务通信与同步 C/OS-的移植规划 C/OS-的移植 移植代码应用到LPC2000C/OS-II的文件结构应用程序 (用户代码)C/OS-II (与处理器无关代码) OS_CORE.c OS_FLAG.c . C/OS-II配置 (与应用无关) OS_CFG.H INCLUDES.H C/OS-II移植 (与处理器相关代码)CPU定时器 硬件软件 当处理临界段代码时,须关中断,处理完毕后, 再开中断 关中断时间是实时内核最重要的指标之一。它影 响

6、用户系统对实时事件的相应特性。 在实际应用中,关中断的时间很大程度上取决于 微处理器的结构和编译器生成的代码质量 微处理器通常具有关中断/开中断操作。 C源代码中插入汇编语言语句,实现关中断/开中断操 作 关中断/开中断操作作为语言的扩展部分,直接从C语 言中可以关中断/开中断C/OS-II开关中断的方法C/OS-II开关中断的方法 C/OS-II定义了两个宏调用来开关中断: OS_ENTER_CRITICAL( ) (禁止中断的宏) OS_EXIT_CRITICAL( ) (启用中断的宏)OS_ENTER_CRITICAL( );/* C/OS-II临界段代码*/OS_EXIT_CRITIC

7、AL( ); 宏定义取决于使用的微处理器。在文件OS_CPU.H 有相应的宏定义 C/OS-II中,每种微处理器都有自己的 OS_CPU.H文件任务(task)典型的任务:一个无限循环 void mytask(void *pdata) for (;) do something;waiting;do something; Task Structurevoid YourTask (void *pdata) (1)for (;) (2)/* 用户代码 */调用uC/OS-II的某种系统服务:OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SE

8、LF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/* 用户代码 */任务完成后的自我删除 当任务完成后,任务可以自我删除 任务代码并非真的删除了,系统只是简单地 不再理会这个任务 这个任务的代码也不会再运行了,即使任务 调用OSTaskDel(),这个任务也绝不会返回void YourTask (void *pdata)/* 用户代码 */OSTaskDel(OS_PRIO_SELF);C/OS II中的任务 C/OS II 2.5版本支持64个任务,每个任务一个特 定的优先级。数字越小,优先级越高 系统总是运行进入就绪态

9、优先级最高的任务 任务优先级号就是任务编号(ID).优先级号也被一 些内核功能函数调用。如OsTaskChangePrio( )及 OsTaskDel( ). 系统占用了8个任务,保留优先级为0、1、2、3、 OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0 即:建议不使用上述最高4个和最低4个优先级,用户 任务仍可达56个任务状态 在任一给定的时刻,任务的状态一定是 以下五种状态之一: 睡眠态(task dormant) 就绪态(task ready) 运行态(task running) 等待状态(t

10、ask waiting) 中断服务态(ISR running)睡眠态(task dormant) 指任务驻留在程序空间(ROM或RAM),还没有 交给系统来管理的状态 任务交给系统通过调用以下函数之一来实现: OSTaskCreate() OSTaskCreateExt() 告知系统: 任务的起始地址 任务建立时,用户给任务赋予的优先级 任务要使用的栈空间大小等就绪态(task ready) 任务一旦创建就进入就绪态,准备运行 任务的创建可以是在多任务开始之前,也可 以动态地由一个运行着的任务创建 若刚创建任务的优先级高于创建它的任务的 优先级,它将立即获得cpu的使用权 任务可通过OSTas

11、kDel()返回睡眠态;或调 用该函数让另一个任务进入睡眠态运行态(task running) 就绪的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态 任何时刻只有一个任务处于运行态 调用OSStart()可以启动多任务。该函数只能在启动时调用一次 OSStart()运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务等待状态(task waiting) 正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。OSTimeDly()OSTimeDlyHMSM() 等待时间过去后,系统服务(内部

12、)函数OSTimeTick()使延迟了的任务进入就绪态 用户无需在应用程序代码中调用这个函数等待状态(续) 正在运行的任务可能需要通过调用函数等待某一事件发生。如果该事件并未发生,任务就进入等待状态OSFlagPend();OSMutexPend()OSSemPend();OSMboxPend() 当事件发生或等待超时,被挂起的任务就进入就绪态中断服务态(ISR running) 正在执行的任务是可以被中断的,除非该任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态 响应中断后,正在运行的任务被挂起,中断服务子程序控制了CPU的使用权中断服务态(ISR running) 中断服务

13、子程序可能会报告一个或多个事件的发 生,而使一个或多个任务进入就绪态 上述情况下,从中断服务子程序返回之前,C/OS II 要判定:被中断的任务是否还是就绪态任务中优先级最高的 如果中断服务子程序使另一个优先级更高的任务进入了 就绪态,则新进入就绪态的这个优先级更高的任务将得 以运行;否则,原来被中断了的任务将继续运行。任务状态 当所有的任务都在等待时间发生或等待延迟时间结束时,C/OS II 执行空闲任务(Idle Task)的内部函数,即:OSTaskIdle()任务状态任务的CPU使用权 被剥夺中断恢复 任务任务控制块(TCB) 任务控制块 OS_TCB是一个数据结构,保存该任 务的相关

14、参数,包括任务堆栈指针、状态、优先 级、任务表位置、任务链表指针等 所有的任务控制块分为两条链表:空闲链表使用链表 当任务的CPU使用权被剥夺时,系统用它来保存 该任务的状态 全部驻留在RAM中C/OS-II任务控制块 typedef struct os_tcb OS_STK *OSTCBStkPtr(当前任务堆栈栈顶 指针);#if OS_TASK_CREATE_EXT_EN0void *OSTCBExtPtr; (指向用户定义的任务控制块扩 展) OS_STK *OSTCBStkBottom;(指向任务堆栈栈 底指针)INT32U OSTCBStkSize;(存有栈中可容纳的指针元数目)I

15、NT16U OSTCBOpt; INT16U OSTCBId; (存储任务的识别码 ID,备用) #endifstruct os_tcb *OSTCBNext; (任务控制块OS-TCB双向链表的后链接 )struct os_tcb *OSTCBPrev; (任务控制块OS-TCB双向链表的前链接 ) #if (OS_Q_EN (指向事件控制块的指针) #endif空任务列表n所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl 中n系统初始化时,所有任务控制块被链接成空任务控制块的单向链表n任务建立后,空任务控制块指针OSTCBFreeList指向的任务控制块就 赋给了该任务,然后OSTCBFreeList的值调整为指向链表中的下一个空 任务控制块n任务一旦被删除,任务控制块就还给空任务链表任务级的任务调度-OSSched C/OS是占先式实时多任务内核,优先级最高的任务 一旦准备就绪,则拥有CPU的所有权

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号