USTC 中国人 μC/OS-I分析 李曦 lixx@ustc.edu.cn infolab@cs.ustc
mC/OS-Ⅱ分析 李曦 llxx@ustc.edu.cn UnRegistered infolab@cs.ustc
本节提要 USTO 1 μC/OS-Ⅱ简介 2 μC/OS-Ⅱ内核结构 3 μC/OS-Ⅱ任务管理 4 C/OS-Ⅱ时间管理 5 μC/OS-Ⅱ任务通信与同步 6 μC/OS-Ⅱ内存管理 7 μC/OS-Ⅱ移植
本节提要 11 33 22 55 44 77 mC/OS-Ⅱ简介 mC/OS-Ⅱ内核结构 mC/OS-Ⅱ任务通信与同步 mC/OS-Ⅱ任务管理 mC/OS-Ⅱ时间管理 mC/OS-Ⅱ移植 UnRegistered 66 mC/OS-Ⅱ内存管理
uC/OSI的非功能性特点(一) 基于优先级的可抢占实时多任务内核 - 微内核体系 ·任务调度和管理、时钟管理、任务同步与通信、内存管理和中断 服务等 -无MMU和外设 ·没有图形界面、网络功能和文件系统等 -全部函数调用与服务的执行时间具有可确定性。 -最多支持64个任务,分别对应优先级0~63 ·各任务的优先级必须唯 一其中0为最高优先级 一目前这一版本保留8个给系统,应用程序最多可以有56个任务。 -不允许同优先级:不支持时间片轮转调度法 ·静态分配优先级:固定优先级 一但为了消除优先级翻转,支持动态优先级 ·允许每个任务有各自的栈空间。 -事件驱动:非轮询 llxx@ustc.edu.cn 3/90
llxx@ustc.edu.cn 3/90 • 基于优先级的可抢占实时多任务内核 –微内核体系 • 任务调度和管理、时钟管理、任务同步与通信、内存管理和中断 服务等 –无MMU和外设 • 没有图形界面、网络功能和文件系统等 –全部函数调用与服务的执行时间具有可确定性。 –最多支持64个任务,分别对应优先级0~63 • 各任务的优先级必须唯一 – 其中0为最高优先级 – 目前这一版本保留8个给系统,应用程序最多可以有56个任务。 –不允许同优先级:不支持时间片轮转调度法 • 静态分配优先级:固定优先级 – 但为了消除优先级翻转,支持动态优先级 • 允许每个任务有各自的栈空间。 –事件驱动:非轮询 mC/OSII的非功能性特点(一) UnRegistered
uC/OS的性能特点(二) 中断管理 ●中断可以使正在执行的任务暂时挂起。 。如果优先级更高的任务被该中断唤醒, 则高优先级的任务在中断嵌套全部 退出后立即执行(抢占式)。 ●中断嵌套层数可达255层。 中断响应 任务调度 任务执行 外部事件2 响应输出2 可移植性(Portab1e) 可裁剪(Scalable) -通过条件编译(#define)实现 ● 可固化(ROMable) ● 稳定性与可靠性 llxx@ustc.edu.cn 4/90
llxx@ustc.edu.cn 4/90 l 中断管理 l 中断可以使正在执行的任务暂时挂起。 l 如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部 退出后立即执行(抢占式)。 l 中断嵌套层数可达255层。 • 可移植性(Portable) • 可裁剪(Scalable) – 通过条件编译(#define)实现 l 可固化(ROMable) l 稳定性与可靠性 mC/OS的性能特点(二) 中断响应 任务调度 任务执行 外部事件2 响应输出2 UnRegistered
uC/OS-II的文件结构 应用程序软件 UC/OS-II Hardware Independent Software (与处理器无关的代码) uC/0S-II设置 Applications OS CORE.C uCOS II.C (与应用相关的代码) OS MBOX.C uCOS II.C UO System RTOS libraries OS MEM.C OS Q,C OS CFG.H TCPAP OS SEM.C OS TASK.C INCLUDES.H! Stack OS_TIME.C File System RTOS Kernel Hardware Abstraction Layer:BSP&Device Driver uC/OS-II移植 (与处理器相关的代码) scsI Flash MMU Cache Serial Ethernet Device OS CPU.H Driver Driver Driver Driver Driver Driver Drvers OS CUP A.ASM OS_CPU_C.C Hardware 软件 硬件 CPU 时钟 5/90
llxx@ustc.edu.cn 5/90 mC/OS-II的文件结构 UnRegistered
基于uC/OS-IⅡ的系统代码生成 Object Executable ROM Files Image File Read-Write Image Compiler File Memory (RAM) Assembler Locator Program Initialization Re-Entrant Library: Linker Read-Only Memory Real-Time Kernel: ROM "Burner" (ROM)
基于mC/OS-II的系统代码生成 UnRegistered
操作系统的启动和运行过程 s》 嵌入式控制器硬件 初始化 启动多任务调 ARMTargetInit 度OSStart0 操作系统初始 初始化用户界 主任 化OSInit(0 面、时钟 务 任务 任务 initOSGUI n InitRtcO LCD初始化 创建任 用户 LCD Init( OSTaskCreate 0 程序 装载字库 调用系统配置文件 消息 LoadFont() LoadConfigSys 处理 事件驱动:非轮询 llxx@ustc.edu.cn 7/90
llxx@ustc.edu.cn 7/90 操作系统的启动和运行过程 嵌入式控制器硬件 初始化 ARMTargetInit () 操作系统初始 化OSInit() LCD 初 始 化 LCD_Init() 装 载 字 库 LoadFont() 调用系统配置文件 LoadConfigSys 创 建 任 务 OSTaskCreate () 初始化用户界 面、时钟 initOSGUI() InitRtc() 启动多任务调 度OSStart() 主 任 务 用 户 程序 消 息 处理 任 务 1 任 务 n …… 事件驱动:非轮询 UnRegistered
任务(如何把问题分割成多个任务?) TASK #1 TASK#2 TASK #n Stack Stack Stack istere Task ControlBlock Task Control Block SP 二2二 SP Priority MEMORY CPU Mem partition? SP Context 0
llxx@ustc.edu.cn 8/90 任务(如何把问题分割成多个任务?) Mem partition? UnRegistered
任务的状态(何时进行任务调度?) WAITING OSMBoxPost() 0539ox=M0 OSOPosto) G0下4减) OSOPostFront( OSTaskDel() OSSemPost() OSS mPend) OSTaskResume() CSTaskSuspend( OSTimeDlyResume( OSTimeDly() OSTimeTicki) OSTimeDlyHMSMO OSTaskCreate() OSTaskCreateEx戴) OSStart() OSIntExito Interrupt OS TASK SWO DORMANT READY RUNNING ISR OSTaskDel() OSIntExit) Task is Preempted OSTaskDel0 llxx@ustc.edu.cn 9/90
llxx@ustc.edu.cn 9/90 任务的状态(何时进行任务调度?) UnRegistered
2.3任务控制块(TCB) 0S_TCB保存任务的相关参数 -包括任务堆栈指针,状态,优 TCB结构 先级,任务表位置,任务链表 指针等。 链表指针 任务D ·所有的任务控制块分别属于 任务状态 两条链表 任务优先级 -空闲TCB表:单向链表,与系 任务上下文 统最大任务数有关 一就绪链表:双向链表 llxx@ustc.edu.cn 10/90
llxx@ustc.edu.cn 10/90 2.3 任务控制块(TCB) • OS_TCB保存任务的相关参数 –包括任务堆栈指针,状态,优 先级,任务表位置,任务链表 指针等。 • 所有的任务控制块分别属于 两条链表 –空闲TCB表:单向链表,与系 统最大任务数有关 –就绪链表:双向链表 链表指针 任务ID 任务状态 任务优先级 任务上下文 TCB结构 UnRegistered