嵌入式操作糸统一UC/OS What is uc/OS? u micro C: control uC/OS:适合于小的、控制器的操作系统 小巧 公开源代码,详细的注解 可剥夺实时内核 ■可移植性强 多任务 ■确定性 2002/11
嵌入式操作系统—uC/OS 2002/11 1 What is uC/OS? u: Micro C:control uC/OS : 适合于小的、控制器的操作系统 ◼ 小巧 ◼ 公开源代码,详细的注解 ◼ 可剥夺实时内核 ◼ 可移植性强 ◼ 多任务 ◼ 确定性
嵌入式操作糸统一UC/OS The Story of uc/Os 美国人 Jean labrosse1992年编写的 商业软件的昂贵 应用面覆盖了诸多领域,如照相机、医疗器 械、音响设备、发动机控制、高速公路电话 系统、自动提款机等 1998年uC/OS,目前的版本uC/OS-IV2.51 www.ucos-i.com 2002/11
嵌入式操作系统—uC/OS 2002/11 2 The Story of uC/OS ◼ 美国人Jean Labrosse 1992年编写的 ◼ 商业软件的昂贵 ◼ 应用面覆盖了诸多领域,如照相机、医疗器 械、音响设备、发动机控制、高速公路电话 系统、自动提款机等 ◼ 1998年uC/OS-II,目前的版本uC/OS-II V2.51 ◼ www.uCOS-II.com
嵌入式操作糸统一UC/OS 概要 ■内核结构-任务以及调度机制 任务间通信 ■UC/OS的移植 在PC机上运行uCOS 2002/11 3
嵌入式操作系统—uC/OS 2002/11 3 概要 ◼ 内核结构-任务以及调度机制 ◼ 任务间通信 ◼ uC/OS的移植 ◼ 在PC机上运行uC/OS
嵌入式操作糸统一UC/OS 任务task 典型的一个无限循环 void mytask(void *pdata) for (it do something; waiting do something; 支持64个任务,每个任务一个特定的优先级。优先级 越高,数字越小 系统占用了两个任务,空闲任务和统计任务 2002/11
嵌入式操作系统—uC/OS 2002/11 4 任务task ◼ 典型的一个无限循环。 void mytask(void *pdata) { for (;;) { do something; waiting; do something; } } ◼ 支持64个任务,每个任务一个特定的优先级。优先级 越高,数字越小 ◼ 系统占用了两个任务,空闲任务和统计任务
嵌入式操作糸统一UC/OS 任务的数据结构—任务控制块 任务控制块 os tcb,包括 任务堆栈指针,状态,优先级,任务表 位置,任务链表指针等, 所有的任务控制块分为两条链表,空闲 链表和使用链表 新任务TCB TCBO TCBI nex OSTCBFreelist 图43TCB的双向链表结构 2002/11
嵌入式操作系统—uC/OS 2002/11 5 任务的数据结构—任务控制块 ◼ 任务控制块 OS_tcb,包括 任务堆栈指针,状态,优先级,任务表 位置,任务链表指针等。 ◼ 所有的任务控制块分为两条链表,空闲 链表和使用链表。 OSTCBFreeList TCB0 TCB1 TCBn 新任务TCB (1) 空 (2) (3) next pre 图 4.3 TCB的双向链表结构
嵌入式操作糸统一UC/OS 任务控制块结构 Struct os tcb oS stK *OSTCBStkPtr struct os tcb *OSTCBNext struct os tcb OSTCBprev; OS EVent *OSTCBEventptr void *OSTCBMsg INT 16U OSTCBDly int8u oSTCBStat inT8U OST CBPrio iNT8U OSTCBX, OSTCBY, OSTCBBitX, oSTCBBitY 3OS_TCB 2002/11
嵌入式操作系统—uC/OS 2002/11 6 任务控制块结构 ◼ Struct os_tcb { OS_STK *OSTCBStkPtr; struct os_tcb *OSTCBNext; struct os_tcb *OSTCBprev; OS_EVENT *OSTCBEventPtr; void *OSTCBMsg; INT16U OSTCBDly; INT8U OSTCBStat; INT8U OSTCBPrio; INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY; } OS_TCB
嵌入式操作糸统一UC/OS 任务的状态 WAITING OSMBoxPost OSMBoxPend( oSQPost( OSQPend( OSQPostFront( OSTaskDelO OSSemPost0 OSSemPend() OSTask Resume() OSTaskSuspend( OSTime Dly Resume( OSTime Dly OSTime Dly HMSM( OSTask) oSTaskCreate Ex咱 aSSart( OSIntExitO OS TASK SW DORMAN READY SR OSTaskDelO OSInt Exit Task is Preempted Figure 3-1, Task States 2002/11
嵌入式操作系统—uC/OS 2002/11 7 任务的状态
嵌入式操作糸统一UC/OS 任务的状态 OSTCBStat 运行,就绪,等待,挂起. OSTCBStat 低四位 挂起队列邮箱信号量 可以有多个准备就绪的任务,但一个时 刻只有一个任务可以运行, OSHighRd 2002/11
嵌入式操作系统—uC/OS 2002/11 8 任务的状态 OSTCBStat ◼ 运行,就绪,等待,挂起… ◼ 可以有多个准备就绪的任务,但一个时 刻只有一个任务可以运行,OSHighRdy 挂起 队列邮箱信号量 OSTCBStat 低四位
嵌入式操作糸统一UC/OS 任务的调度- OSSched UC/OS是占先式实时多任务内核,优先级 最高的任务一旦准备就绪,则拥有CPU的 所有权开始投入运行 UC/OS中不支持时间片轮转法,每个任务 的优先级要求不一样且是唯一的,所以 任务调度的工作就是:查找准备就绪的 最高优先级的任务并进行上下文切换。 2002/11
嵌入式操作系统—uC/OS 2002/11 9 任务的调度--OSSched ◼ uC/OS是占先式实时多任务内核,优先级 最高的任务一旦准备就绪,则拥有CPU的 所有权开始投入运行。 ◼ uC/OS中不支持时间片轮转法,每个任务 的优先级要求不一样且是唯一的,所以 任务调度的工作就是:查找准备就绪的 最高优先级的任务并进行上下文切换
嵌入式操作糸统一UC/OS 任务的调度 就绪任务表:用于存贮每个任务的就绪 状态标志。由两个变量组成: OSRedy Grp:8位,每位表示一组(8个)任务中 是否有就绪的任务 OSRdytb]:位图方式表示某个任务是否就绪。 2002/11
嵌入式操作系统—uC/OS 2002/11 10 任务的调度 ◼ 就绪任务表:用于存贮每个任务的就绪 状态标志。由两个变量组成: ◼ OSRedyGrp:8位,每位表示一组(8个)任务中 是否有就绪的任务。 ◼ OSRdyTbl[]:位图方式表示某个任务是否就绪