ucos是什么意思 ucos

什么是UCOS操作系统?u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统 。\x0d\x0a\x0d\x0aμC/OS-II 的前身是μC/OS , 最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载 , 并把μC/OS 的源码发布在该杂志的B B S 上 。\x0d\x0a\x0d\x0aμC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的 , 绝大部分代码是用C语言编写的 。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度 , 为的是便于移植到任何一种其它的CPU 上 。用户只要有标准的ANSI 的C交叉编译器 , 有汇编器、连接器等软件工具 , 就可以将μC/OS-II嵌人到开发的产品中 。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点 ,  最小内核可编译至 2KB。μC/OS-II 已经移植到了几乎所有知名的CPU 上 。\x0d\x0a\x0d\x0a严格地说uC/OS-II只是一个实时操作系统内核 , 它仅仅包含了任务调度 , 任务管理 , 时间管理 , 内存管理和任务间的通信和同步等基本功能 。没有提供输入输出管理 , 文件系统 , 网络等额外的服务 。但由于uC/OS-II良好的可扩展性和源码开放 , 这些非必须的功能完全可以由用户自己根据需要分别实现 。\x0d\x0a\x0d\x0auC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核 , 并在这个内核之上提供最基本的系统服务 , 如信号量 , 邮箱 , 消息队列 , 内存管理 , 中断管理等 。\x0d\x0a\x0d\x0a任务管理\x0d\x0a\x0d\x0auC/OS-II 中最多可以支持64 个任务 , 分别对应优先级0~63 , 其中0 为最高优先级 。63为最低级 , 系统保留了4个最高优先级的任务和4个最低优先级的任务 , 所有用户可以使用的任务数有56个 。\x0d\x0a\x0d\x0auC/OS-II提供了任务管理的各种函数调用 , 包括创建任务 , 删除任务 , 改变任务的优先级 , 任务挂起和恢复等 。\x0d\x0a\x0d\x0a系统初始化时会自动产生两个任务:一个是空闲任务 , 它的优先级最低 , 改任务仅给一个整形变量做累加运算;另一个是系统任务 , 它的优先级为次低 , 改任务负责统计当前cpu的利用率 。\x0d\x0a\x0d\x0a时间管理\x0d\x0a\x0d\x0auC/OS-II的时间管理是通过定时中断来实现的 , 该定时中断一般为10毫秒或100毫秒发生一次 , 时间频率取决于用户对硬件系统的定时器编程来实现 。中断发生的时间间隔是固定不变的 , 该中断也成为一个时钟节拍 。\x0d\x0a\x0d\x0auC/OS-II要求用户在定时中断的服务程序中 , 调用系统提供的与时钟节拍相关的系统函数 , 例如中断级的任务切换函数 , 系统时间函数 。\x0d\x0a\x0d\x0a内存管理\x0d\x0a\x0d\x0a在ANSI C中是使用malloc和free两个函数来动态分配和释放内存 。但在嵌入式实时系统中 , 多次这样的错作会导致内存碎片 , 且由于内存管理算法的原因 , malloc和free的执行时间也是不确定 。\x0d\x0a\x0d\x0auC/OS-II中把连续的大快内存按分区管理 。每个分区中包含整数个大小相同的内存块 , 但不同分区之间的内存快大小可以不同 。用户需要动态分配内存时 , 系统选择一个适当的分区 , 按块来分配内存 。释放内存时将该块放回它以前所属的分区 , 这样能有效解决碎片问题 , 同时执行时间也是固定的 。\x0d\x0a\x0d\x0a任务间通信与同步\x0d\x0a\x0d\x0a对一个多任务的操作系统来说 , 任务间的通信和同步是必不可少的 。uC/OS-II中提供了4中同步对象 , 分别是信号量 , 邮箱 , 消息队列和事件 。所有这些同步对象都有创建 , 等待 , 发送 , 查询的接口用于实现进程间的通信和同步 。\x0d\x0a\x0d\x0a任务调度\x0d\x0a\x0d\x0auC/OS-II 采用的是可剥夺型实时多任务内核 。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务 。\x0d\x0a\x0d\x0auC/os-II的任务调度是完全基于任务优先级的抢占式调度 , 也就是最高优先级的任务一旦处于就绪状态 , 则立即抢占正在运行的低优先级任务的处理器资源 。为了简化系统设计 , uC/OS-II规定所有任务的优先级不同 , 因为任务的优先级也同时唯一标志了该任务本身 。\x0d\x0a\x0d\x0a任务调度将在以下情况下发生:\x0d\x0a\x0d\x0a1) 高优先级的任务因为需要某种临界资源 , 主动请求挂起 , 让出处理器 , 此时将调度就绪状态的低优先级任务获得执行 , 这种调度也称为任务级的上下文切换 。\x0d\x0a\x0d\x0a2) 高优先级的任务因为时钟节拍到来 , 在时钟中断的处理程序中 , 内核发现高优先级任务获得了执行条件(如休眠的时钟到时) , 则在中断态直接切换到高优先级任务执行 。这种调度也称为中断级的上下文切换 。\x0d\x0a\x0d\x0a这两种调度方式在uC/OS-II的执行过程中非常普遍 , 一般来说前者发生在系统服务中 , 后者发生在时钟中断的服务程序中 。\x0d\x0a\x0d\x0a调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换 。其最高优先级任务的寻找是通过建立就绪任务表来实现的 。u C / O S 中的每一个任务都有独立的堆栈空间 , 并有一个称为任务控制块TCB(Task Control Block)的数据结构 , 其中第一个成员变量就是保存的任务堆栈指针 。任务调度模块首先用变量OSTCBHighRdy 记录当前最高级就绪任务的TCB 地址 , 然后调用OS_TASK_SW()函数来进行任务切换 。\x0d\x0a\x0d\x0aμC/OS-II的组成部分\x0d\x0a\x0d\x0aμC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信 , CPU的移植等5个部分 。\x0d\x0a\x0d\x0a1) 核心部分(OSCore.c)\x0d\x0a\x0d\x0a是操作系统的处理核心 , 包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分 。能够维持系统基本工作的部分都在这里 。\x0d\x0a\x0d\x0a2) 任务处理部分(OSTask.c)\x0d\x0a\x0d\x0a任务处理部分中的内容都是与任务的操作密切相关的 。包括任务的建立、删除、挂起、恢复等等 。因为μC/OS-II是以任务为基本单位调度的 , 所以这部分内容也相当重要 。\x0d\x0a\x0d\x0a3) 时钟部分(OSTime.c)\x0d\x0a\x0d\x0aμC/OS-II中的最小时钟单位是timetick(时钟节拍) 。任务延时等操作是在这里完成的 。\x0d\x0a\x0d\x0a4) 任务同步和通信部分\x0d\x0a\x0d\x0a为事件处理部分 , 包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问 。\x0d\x0a\x0d\x0a5) 与CPU的接口部分\x0d\x0a\x0d\x0a是指μC/OS-II针对所使用的CPU的移植部分 。由于μC/OS-II是一个通用性的操作系统 , 所以对于关键问题上的实现 , 还是需要根据具体CPU的具体内容和要求作相应的移植 。这部分内容由于牵涉到SP等系统指针 , 所以通常用汇编语言编写 。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容 。
ucos原理ucos-ii是一个可剥夺型内核的实时操作系统 , 以stm32来说 , 使用系统滴答定时器 , 定时产生一个时钟节拍 , 来推动任务的调度 , 管理 , 切换等 。

秒懂生活扩展阅读