uCOS II简介
u C / O S 是一种免费揭露源代码、结构细巧、具有可掠夺实时内核的实时操作体系。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式体系专家Jean J.Labrosse 在《嵌入式体系编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。
μC/OS 和μC/OS-II 是专门为计算机的嵌入式运用规划的, 绝大部分代码是用C言语编写的。CPU 硬件相关部分是用汇编言语编写的、总量约200行的汇编言语部分被压缩到最低极限,为的是便于移植到任何一种其它的CPU 上。用户只需有规范的ANSI 的C穿插编译器,有汇编器、连接器等软件东西,就可以将μC/OS-II嵌人到开发的产品中。μC/OS-II 具有履行效率高、占用空间小、实时功用优秀和可扩展性强等特色, 最小内核可编译至 2KB 。μC/OS-II 现已移植到了简直一切闻名的CPU 上。
严格地说uC/OS-II只是一个实时操作体系内核,它只是包含了使命调度,使命办理,时刻办理,内存办理和使命间的通讯和同步等根本功用。没有供给输入输出办理,文件体系,网络等额定的服务。但因为uC/OS-II杰出的可扩展性和源码敞开,这些非有必要的功用彻底可以由用户自己依据需求别离完结。
uC/OS-II方针是完结一个依据优先级调度的抢占式的实时内核,并在这个内核之上供给最根本的体系服务,如信号量,邮箱,音讯行列,内存办理,中止办理等。
使命办理
uC/OS-II 中最多可以支撑64 个使命,别离对应优先级0~63,其间0 为最高优先级。63为最初级,体系保留了4个最高优先级的使命和4个最低优先级的使命,一切用户可以运用的使命数有56个。
uC/OS-II供给了使命办理的各种函数调用,包含创立使命,删去使命,改动使命的优先级,使命挂起和康复等。
体系初始化时会自动发生两个使命:一个是闲暇使命,它的优先级最低,改使命仅给一个整形变量做累加运算;另一个是体系使命,它的优先级为次低,改使命担任计算当时cpu的利用率。
时刻办理
uC/OS-II的时刻办理是经过守时中止来完结的,该守时中止一般为10毫秒或100毫秒发生一次,时刻频率取决于用户对硬件体系的守时器编程来完结。中止发生的时刻距离是固定不变的,该中止也成为一个时钟节拍。
uC/OS-II要求用户在守时中止的服务程序中,调用体系供给的与时钟节拍相关的体系函数,例如中止级的使命切换函数,体系时刻函数。
内存办理
在ANSI C中是运用malloc和free两个函数来动态分配和开释内存。但在嵌入式实时体系中,屡次这样的错作会导致内存碎片,且因为内存办理算法的原因,malloc和free的履行时刻也是不确定。
uC/OS-II中把接连的大快内存按分区办理。每个分区中包含整数个巨细相同的内存块,但不同分区之间的内存快巨细可以不同。用户需求动态分配内存时,体系挑选一个恰当的分区,按块来分配内存。开释内存时将该块放回它以前所属的分区,这样能有用处理碎片问题,一起履行时刻也是固定的。
使命间通讯与同步
对一个多使命的操作体系来说,使命间的通讯和同步是必不可少的。uC/OS-II中供给了4中同步目标,别离是信号量,邮箱,音讯行列和事情。一切这些同步目标都有创立,等候,发送,查询的接口用于完结进程间的通讯和同步。
使命调度
uC/OS-II 选用的是可掠夺型实时多使命内核。可掠夺型的实时内核在任何时候都运转安排妥当了的最高优先级的使命。
uC/os-II的使命调度是彻底依据使命优先级的抢占式调度,也便是最高优先级的使命一旦处于安排妥当状况,则当即抢占正在运转的低优先级使命的处理器资源。为了简化体系规划,uC/OS-II规则一切使命的优先级不同,因为使命的优先级也一起仅有标志了该使命自身。
使命调度将在以下情况下发生:
1) 高优先级的使命因为需求某种临界资源,自动恳求挂起,让出处理器,此刻将调度安排妥当状况的低优先级使命取得履行,这种调度也称为使命级的上下文切换。
2) 高优先级的使命因为时钟节拍到来,在时钟中止的处理程序中,内核发现高优先级使命取得了履行条件(如休眠的时钟届时),则在中止态直接切换到高优先级使命履行。这种调度也称为中止级的上下文切换。
这两种调度方法在uC/OS-II的履行过程中十分遍及,一般来说前者发生在体系服务中,后者发生在时钟中止的服务程序中。
调度作业的内容可以分为两部分:最高优先级使命的寻觅和使命切换。其最高优先级使命的寻觅是经过树立安排妥当使命表来完结的。u C / O S 中的每一个使命都有独立的仓库空间,并有一个称为使命操控块TCB(Task Control Block)的数据结构,其间第一个成员变量便是保存的使命仓库指针。使命调度模块首先用变量OSTCBHighRdy 记载当时第一流安排妥当使命的TCB 地址,然后调用OS_TASK_SW()函数来进行使命切换。
μC/OS-II的组成部分
μC/OS-II可以大致分红中心、使命处理、时刻处理、使命同步与通讯,CPU的移植等5个部分。
1) 中心部分(OSCore.c)
是操作体系的处理中心,包含操作体系初始化、操作体系运转、中止进出的前导、时钟节拍、使命调度、事情处理等多部分。可以保持体系根本作业的部分都在这儿。
2) 使命处理部分(OSTask.c)
使命处理部分中的内容都是与使命的操作密切相关的。包含使命的树立、删去、挂起、康复等等。因为μC/OS-II是以使命为根本单位调度的,所以这部分内容也适当重要。
3) 时钟部分(OSTime.c)
μC/OS-II中的最小时钟单位是timetick(时钟节拍)。使命延时等操作是在这儿完结的。
4) 使命同步和通讯部分
为事情处理部分,包含信号量、邮箱、邮箱行列、事情标志等部分;首要用于使命间的互相联系和对临界资源的拜访。
5) 与CPU的接口部分
是指μC/OS-II针对所运用的CPU的移植部分。因为μC/OS-II是一个通用性的操作体系,所以关于关键问题上的完结,仍是需求依据详细CPU的详细内容和要求作相应的移植。这部分内容因为牵涉到SP等体系指针,所以一般用汇编言语编写。首要包含中止级使命切换的底层完结、使命级使命切换的底层完结、时钟节拍的发生和处理、中止的相关处理部分等内容。