嵌入式实时操作系统(uCOS)分析
发布时间:2021-06-06
发布时间:2021-06-06
嵌入式系统设计与实例开发—— C/OS-Ⅱ
实时操作系统 C/OS-Ⅱ分析
本节提要1 C/OS-Ⅱ简介 2 C/OS-Ⅱ内核结构 3 4 5 6 C/OS-Ⅱ任务管理
C/OS-Ⅱ时间管理 C/OS-Ⅱ任务通信与同步
C/OS-Ⅱ移植2
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.61
2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器 中网站()
C/OS的性能特点(一)
公开源代码 可移植性(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)。这种可剪裁性是靠条件编译实现的。
C/OS的性能特点(二)
占先式(Preemptive) 多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多 可以有56个任务
可确定性全部 C/OS-II的函数调用与服务的执行时间具有可确定性。
任务栈每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压低应 用程序对RAM的需求。
系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存 的申请与释放、时间相关函数等。
中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则 高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。
稳定性与可靠性6
µC/OS-II图书
描述了µC/OS-II内部的工作原理随书的CD中包含了源代码
工业界最清晰的源代码
除英文版外,有中文和韩文版
EnglishISBN 1-57820-103-9 美国CMP BOOK
ChineseISBN 7-81077-290-2 北京航空航天大学出版社
KoreanISBN 89-951540-5-5
µC/OS-II的各种商业应用
全世界有数百种产品在应用:
Avionics Medical Cell phones
Routers and switchesHigh-end audio equipment Washing machines and dryers UPS (Uninterruptible Power Supplies)
Industrial controllersGPS Navigation Systems Microwave Radios Instrumentation
Point-of-sale terminals更多
µC/OS-II提供的系统服务信号量 带互斥机制的信号量
减少优先级倒臵的问题
事件标志 消息信箱
消息队列内存管理 时钟管理
任务管理
µC/GUI and µC/FS
µC/GUI
嵌入式的用户界面 用ANSI C书写
支持任何8, 16, 32-bits CPU彩色,灰、度,等级或黑白显示 代码尺寸小
µC/FS
嵌入式的文件系统Written in ANSI C
用ANSI C书写支持任何8, 16, 32-bits CPU 支持SMC, MMC, SD, CF, IDE, Flash, RAM其他介质10
本节提要1 C/OS-Ⅱ简介 2 C/OS-Ⅱ内核结构 3 4 5 6 C/OS-Ⅱ任务管理
C/OS-Ⅱ时间管理 C/OS-Ⅱ任务通信与同步
C/OS-Ⅱ移植11
C/OS-II的文件结构
C/OS-II的内核结构
内核结构
任务管理时间管理 任务之间通信与同步 C/OS的移植
任务task典型的任务一个无限循环。 void mytask(void *pdata) {
for (;;) {do something; waiting; do something; } }
C/OS –II 2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高 ,数字越小。
系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0。
任务状态
任务控制块(TCB)
任务控制块 OS_TCB是一个数据结构,保存该任务的相关 参数,包括任务堆栈指针,状态,优先级,任务表位臵, 任务链表指针等。
所有的任务控制块分为两条链表,空闲链表和使用链表。
µ C/OS-II任务控制块.typedef struct os_tcb { OS_STK void OS_STK INT32U INT16U INT16U #endif *OSTCBStkPtr; *OSTCBExtPtr; *OSTCBStkBottom; OSTCBStkSize; OSTCBOpt; OSTCBId; #if OS_TASK_CREATE_EXT_EN>0
struct os_tcb *OSTCBNext;struct os_tcb *OSTCBPrev; #if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
OS_EVENT#endif
*OSTCBEventPtr;
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN void #endif INT16U OSTCBDly; *OSTCBMsg;
INT8UINT8U INT8U INT8U INT8U INT8U #if OS_TASK_DEL_EN BOOLEAN #endif } OS_TCB;
OSTCBStat;OSTCBPrio; OSTCBX; OSTCBY; OSTCBBitX; OSTCBBitY; OSTCBDelReq;
任务控制块OS_TCB中几个成员的算
法OSTCBY OSTCBBitY OSTCBX OSTCBBitX = priority >> 3; = OSMapTbl[priority >> 3]; = priority & 0x07; = OSMapTbl[priority & 0x07];
空任务列表所有的任务控制块都被放臵在任务控制块列表数组OSTCBTbl[]中, 系统初始化时,所有任务控制块被链接成空任务控制块的单向链表, 任务建立后,空任务控制块指针OSTCBFreeList指向的任务控制块 就赋给了该任务,然后OSTCBFreeList的值调整为指向链表中的下 一个空任务控制块。
任务控制块初始化函数INT8U OS_TCBInit ( INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt ) {……
}
上一篇:天津地铁线路运营图
下一篇:《信息检索策略》教学设计