基于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