ucos-ii经典讲解
- 格式:ppt
- 大小:1.37 MB
- 文档页数:59
嵌入式系统——基础知识操作系统OS控制和管理计算机软硬件资源,合理组织计算机工作流程,方便用户使用计算机的系统软件。
可将OS看成是应用程序与硬件间的接口或虚拟机。
OS功能:进程管理、存储管理、文件管理、设备管理、网络和通信管理等。
嵌入式操作系统EOS运行在嵌入式硬件平台上,对整个系统及其所操作的部件装置等资源进行统一协调、指挥和控制的系统软件。
EOS特点:微型化、可裁剪性、实时性、高可靠性、易移植性重点关注:高实时性、硬件相关依赖性、软件固化、应用专用性、网络功能。
实时操作系统TROS能使计算机及时响应外部事件请求,并能及时控制所有实时设备与实时任务协调运行,且能在规定时间内完成事件处理的OS。
RTOS基本要求:1、逻辑功能正确:RTOS的计算必须产生正确的结果;2、时间正确:RTOS的计算必须在预定的周期内完成。
RTOS应满足条件:1、多任务系统;2、任务的切换时间应与系统中的任务书无关;3、中断延时的时间可预知并尽可能短。
无论在什么情况下,OS完成任务所需的时间应该是在程序设计时就可预知的。
嵌入式实时操作系统ERTOS用于嵌入式系统,对系统资源和多个任务进行管理,且具有高可靠性、良好可裁剪性等优良性能的,为应用程序提供运行平台和实时服务的微型系统软件。
ERTOS最重要的三项服务:1、多任务管理2、内存管理3、外围资源管理嵌入式微处理器(特点)1、对实时多任务OS有很强的支持能力;2、具有功能很强的存储区域保护功能;3、处理器结构可扩展;4、低功耗;微处理器主要发展方向:小体积、高性能、低功耗微处理器分类:MCU、MPU、DSP、SOC嵌入式系统发展方向1、嵌入式开发是一项系统工程,嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,还需要提供强大的硬件开发工具与软件支持包;2、网络化、信息化的要求随着因特网技术的成熟、宽带的提高而日益提高,使得以往单一功能的设备功能不再单一,结构更加复杂;3、网络互连成为必然趋势(IEEE1394、USB、CAN、Bluetooth等网络接口);4、精简系统内核、算法、降低功耗和软硬件成本;5、提供友好的多媒体人机界面。
实验一、任务创建与删除1、uC/OS-II介绍对于操作系统的学习,创建任务和删除任务是最为基础的工作,uC/OS-II以源代码的形式发布,是开源软件, 但并不意味着它是免费软件。
可以将其用于教学和私下研究;但是如果将其用于商业用途,那么必须通过Micrium获得商用许可。
uC/OS-II属于抢占式内核,最多可以支持64个任务,分别对应优先级0~63,每个任务只能对应唯一的优先级,其中0为最高优先级。
63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。
uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整型变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。
μC/OS-II可管理多达63个应用任务,并可以提供如下服务,本章将针对以下服务分别以例程的方式来介绍1)信号量2)互斥信号量3)事件标识4)消息邮箱5)消息队列6)任务管理7)固定大小内存块管理8)时间管理2、任务创建与删除想让uC/OS-II管理用户的任务,用户必须要先建立任务,在开始多任务调度(即调用OSStart())前,用户必须建立至少一个任务。
uC/OS-II提供了两个函数来创建任务:OSTask Create()或OSTaskCreateExt()。
可以使用其中任意一个即可,其函数原型如下:INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U pri o)INT8U OSTaskCreateExt (void(*task)(void *pd),void *pdata,SD_STK *ptos,INT8U prio, INT16U id,OS_STK *pbos,INT32U stk_size, void *pext,INT16U opt)task:任务代码指针pdata:任务的参数指针ptos:任务的堆栈的栈顶指针prio:任务优先级id:任务特殊的标识符(uC/OS-II中还未使用)pbos:任务的堆栈栈底的指针(用于堆栈检验)stk_size:堆栈成员数目的容量(宽度为4字节)pext:指向用户附加的数据域的指针opt:是否允许堆栈检验,是否将堆栈清零,任务是否要进行浮点操作等等删除任务,是说任务将返回并处于休眠状态,任务的代码不再被uC/OS-II调用,而不是删除任务代码。
Ucos-II基础原理讲解,任务创建及中断问题2013-6-26 周三Haibara AI Ucos-II在移植过程中的特性,首先要理解所加入的实时操作系统是一个给予定时器节拍的系统。
怎么理解这个问题呢,由该定时器产生脉冲来驱动不同的任务调度,且由于该系统是基于可剥夺内核类型,任务之间的切换时间间隔也由该定时器完成。
不宜过大,否则会造成CPU利用率不高,不宜过小,否则会造成CPU在执行任务时非常被动,时间特别赶。
就想人的心脏一样,动力是固定的,你非要去跑个100公里,心脏不加速你是会窒息而死的。
我们正常心脏跳动是60次左右,同样,单片机也需要一个这样的相对宽松的节拍驱动。
注:众所周知,脉冲本质上仍由晶振提供(或实时时钟),原理都一样,再次请各位不要较真,就暂时以晶振为例。
大家可以考虑一下,晶振的作用是否特别类似于人体的心脏呢?答案是很显然的。
心脏跳动给人体提供输送血液和养料的压力,晶振的设计原理也正是源于此。
他可以像人体心脏一样提供动力输送各个外设(相当于人体器官)所需要的能量。
说这么多,就是要大家理解,人可以实时做出反应,因为人是有生命的,也就是他有反应、判断和处理能力,可以决定什么时间应该做什么。
但是单片机是没有生命的,换句话说,他所谓的处理能力源于人们的代码和程序。
那么,怎么让单片机像人一样拥有生命呢?答案很简单,给他指令,帮助他决定什么时间该做什么,这也就是所谓的实时操作系统。
不只是ucos,其他实时操作系统也是这个道理。
下面我以代码为例,讲述一下ucos的工作流程,如有错误,还请各位前辈指点。
首先任务是怎么样开始执行的?os_err = OSTaskCreateExt((void (*)(void *)) App_TaskStart, */1 (void * ) 0, 2(OS_STK * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],3(INT8U ) APP_TASK_START_PRIO,4(INT16U ) APP_TASK_START_PRIO,5(OS_STK * )&App_TaskStartStk[0],6(INT32U ) APP_TASK_START_STK_SIZE,7(void * )0,8(INT16U )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));9这个东西好像是非常复杂,但是实际上并不需要细究(当然非要细究也是允许的,只不过是C语言而已,看也不是看不懂,对于初学者而言并不推荐而已)。
第4章任务的同步与通信系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。
因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。
与人们依靠通信来互相沟通,从而使人际关系和谐、工作顺利的做法一样,计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。
例如,两个任务:任务A和任务B,它们需要通过访问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责从缓冲区读取该数据。
显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效数据而应该处于等待状态,只有等任务A向缓冲区写入了数据之后,才应该通知任务B去取数据。
例如,任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。
如果这两个任务不这样做,那么也会造成极大的混乱。
总之,多个任务共享同一资源或有工作顺序要求时,在正式工作之前要互相打招呼。
黄宏:别走啊!宋丹丹:我自己的腿,我爱走就走,你管不着!黄宏:腿是你自己的,但手是咱俩的呀!事件任务间的同步依赖于任务间的通信。
在μC/OS-II 中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。
宋丹丹黄宏一个简单的信号量发信方1/0收信方共享资源事件控制块为了把描述事件的数据结构统一起来,μC/OS-II使用叫做事件控制块ECB的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。
事件控制块中包含包括等待任务表在内的所有有关事件的数据typedef struct {INT8U OSEventType;//事件的类型INT16U OSEventCnt;//信号量计数器void *OSEventPtr;//消息或消息队列的指针INT8U OSEventGrp;//等待事件的任务组INT8U OSEventTbl[OS_EVENT_TBL_SIZE];//任务等待表} OS_EVENT;把一个任务置于等待状态要调用OS_EventTaskWait( )函数。
第1章范例 - - - - - - - - - - - - - - - - - - - - - - - - - - 11.00 安装µC/OS-II- - - - - - - - - - - - - - - - - - - - - - - - - - -11.01 INCLUDES.H- - - - - - - - - - - - - - - - - - - - - - - - - - - - 21.02 不依赖于编译的数据类型- - - - - - - - - - - - - - - - - - - - - - 21.03 全局变量- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 31.04 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()- - - - - - - - - - - - -51.05 基于PC的服务- - - - - - - - - - - - - - - - - - - - - - - - - - -51.05.01 字符显示- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 51.05.02 花费时间的测量- - - - - - - - - - - - - - - - - - - - - - - - - - 61.05.03 其他函数- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 61.06 应用µC/OS-II 的范例- - - - - - - - - - - - - - - - - - - - - - - 71.07 例1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -81.07.01 main()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 81.07.02 TaskStart()- - - - - - - - - - - - - - - - - - - - - - - - - - - -111.07.03 TaskN()- - - - - - - - - - - - - - - - - - - - - - - - - - - - -121.08 例2- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 131.08.01 main()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 141.08.02 TaskStart()- - - - - - - - - - - - - - - - - - - - - - - - - - - - 15 1.08.03 TaskN()- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 1.09 例3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 191.09.01 main() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 1.09.02 任务 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 21 1.09.03 注意 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24第2章实时系统概念- - - - - - - - - - - - - - - - - - - - - - - - - - 272.0 前后台系统(FOREGROUND/BACKGROUND SYSTEM) - - - - - - - - - - - - 27 2.1 代码的临界段- - - - - - - - - - - - - - - - - - - - - - - - - - - - 28 2.2 资源- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.3 共享资源- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.4 多任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -28 2.5 任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -29 2.6 任务切换(CONTEXT SWITCH OR TASK SWITCH) - - - - - - - - - - - - - - -30 2.7 内核(KERNEL)- - - - - - - - - - - - - - - - - - - - - - - - - - -302.8 调度(SCHEDULER)- - - - - - - - - - - - - - - - - - - - - - - - - 312.9 不可剥夺型内核(NON-PREEMPTIVE KERNEL)- - - - - - - - - - - - - - - 31 2.10 可剥夺型内核- - - - - - - - - - - - - - - - - - - - - - - - - - - - 32 2.11 可重入性(REENTRANCY)- - - - - - - - - - - - - - - - - - - - - - - 33 2.12 时间片轮番调度法- - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.13 任务优先级- - - - - - - - - - - - - - - - - - - - - - - - - - - - -352.14 2.14静态优先级 - - - - - - - - - - - - - - - - - - - - - - - - - - 352.15 动态优先级 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.16 优先级反转 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35 2.17 任务优先级分配 - - - - - - - - - - - - - - - - - - - - - - - - - - -37 2.18 互斥条件- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 39 2.18.1 关中断和开中断- - - - - - - - - - - - - - - - - - - - - - - - - - - 39 2.18.2 测试并置位- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 40 2.18.3 禁止,然后允许任务切换- - - - - - - - - - - - - - - - - - - - - - - - 40 2.18.4 信号量(SEMAPHORES) - - - - - - - - - - - - - - - - - - - - - - - - - 41 2.19 死锁(或抱死)(DEADLOCK (OR DEADLY EMBRACE))- - - - - - - - - - - - -46 2.20 同步- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 462.21 事件标志(EVENT FLAGS) - - - - - - - - - - - - - - - - - - - - - - - 482.22 任务间的通讯(INTERTASK COMMUNICATION) - - - - - - - - - - - - - - - - 482.23 消息邮箱(MESSAGE MAIL BOXES) - - - - - - - - - - - - - - - - - - - -492.24 消息队列(Message Queue) - - - - - - - - - - - - - - - - - - - - - - 502.25 中断- - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - 512.26 中断延迟- - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - 512.27 中断响应- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 52 2.28 中断恢复时间(Interrupt Recovery) - - - - - - - - - - - - - - - - - - 522.29 中断延迟、响应和恢复- - - - - - - - - - - - - - - - - - - - - - - - 532.30 中断处理时间- - - - - - - - - - - - - - - - - - - - - - - - - - - - 532.31 非屏蔽中断(NMI) - - - - - - - - - - - - - - - - - - - - - - - - - - 542.32 时钟节拍(Clock Tick) - - - - - - - - - - - - - - - - - - - - - - - - 562.33 对存储器的需求- - - - - - - - - - - - - - - - - - - - - - - - - - - 582.34 使用实时内核的优缺点- - - - - - - - - - - - - - - - - - - - - - - - 592.35 实时系统小结- - - - - - - - - - - - - - - - - - - - - - - - - - - - 60第3章内核结构- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 623.0 临界段(Critical Sections) - - - - - - - - - - - - - - - - - - - - - 623.1 任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 623.2 任务状态- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 643.3 任务控制块(Task Control Blocks, OS_TCBs)- - - - - - - - - - - - - - 653.4 就绪表(Ready List)- - - - - - - - - - - - - - - - - - - - - - - - 683.5 任务调度(Task Scheduling)- - - - - - - - - - - - - - - - - - - - - 713.6 给调度器上锁和开锁(Locking and UnLocking the Scheduler) - - - - - - - 723.7 空闲任务(Idle Task) - - - - - - - - - - - - - - - - - - - - - - - - 733.8 统计任务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 743.9 μC/OS中的中断处理- - - - - - - - - - - - - - - - - - - - - - - - - -783.10 时钟节拍- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 823.11 μC/OS-Ⅱ初始化- - - - - - - - - - - - - - - - - - - - - - - - - - 843.12 μC/OS-Ⅱ的启动- - - - - - - - - - - - - - - - - - - - - - - - - - 853.13 获取当前μC/OS-Ⅱ的版本号- - - - - - - - - - - - - - - - - - - - - - 883.14 OSEvent???()函数- - - - - - - - - - - - - - - - - - - - - - - - - - 89第4章任务管理4.0 建立任务,OSTaskCreate() - - - - - - - - - - - - - - - - - - - - - 914.1 建立任务,OSTASKCREATEEXT() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 924.2 任务堆栈 94.3 堆栈检验,OSTASKSTKCHK() 114.4 删除任务,OSTASKDEL() 144.5 请求删除任务,OSTASKDELREQ() 174.6 改变任务的优先级,OSTASKCHANGEPRIO() 204.7 挂起任务,OSTASKSUSPEND() 234.8 恢复任务,OSTASKRESUME() 254.9 获得有关任务的信息,OSTASKQUERY() 26第5章时间管理5.0 任务延时函数,OSTIMEDLY() 15.1 按时分秒延时函数 OSTIMEDLYHMSM() 35.2 让处在延时期的任务结束延时,OSTIMEDLYRESUME() 45.3 系统时间,OSTIMEGET()和OSTIMESET() 6第6章任务之间的通讯与同步6.0 事件控制块ECB 26.1 初始化一个ECB块,OSEVENTWAITLISTINIT() 66.2 使一个任务进入就绪状态,OSEVENTTASKRDY() 76.3 使一个任务进入等待状态, OSEVENTTASKWAIT() 96.4 由于等待超时将一个任务置为就绪状态, OSEVENTTO() 96.5 信号量106.5.1 建立一个信号量, OSSemCreate() 116.5.2 等待一个信号量, OSSemPend() 126.5.3 发送一个信号量, OSSemPost() 146.5.4 无等待地请求一个信号量, OSSemAccept() 166.5.5 查询一个信号量的当前状态, OSSemQuery() 176.6 邮箱186.6.1 建立一个邮箱,OSMboxCreate() 196.6.2 等待一个邮箱中的消息,OSMboxPend() 206.6.3 发送一个消息到邮箱中,OSMboxPost() 226.6.4 无等待地从邮箱中得到一个消息, OSMboxAccept() 246.6.5 查询一个邮箱的状态, OSMboxQuery() 256.6.6 使用邮箱作为二值信号量266.6.7 使用邮箱实现延时,而不使用OSTimeDly() 276.7 消息队列286.7.1 建立一个消息队列,OSQCreate() 316.7.2 等待一个消息队列中的消息,OSQPend() 336.7.3 向消息队列发送一个消息(FIFO),OSQPost() 356.7.4 向消息队列发送一个消息(LIFO),OSQPostFront() 376.7.5 无等待地从一个消息队列中取得消息, OSQAccept() 396.7.6 清空一个消息队列, OSQFlush() 406.7.7 查询一个消息队列的状态,OSQQuery() 416.7.8 使用消息队列读取模拟量的值426.7.9 使用一个消息队列作为计数信号量43第7章内存管理7.0 内存控制块 17.1 建立一个内存分区,OSMEMCREATE() 37.2 分配一个内存块,OSMEMGET() 67.3 释放一个内存块,OSMEMPUT() 77.4 查询一个内存分区的状态,OSMEMQUERY() 87.5 USING MEMORY PARTITIONS 97.6 等待一个内存块 11第8章移植µC/OS-Ⅱ8.00 开发工具8.01 目录和文件8.02 INCLUDES.H8.03 OS_CPU.H8.03.01 与编译器相关的数据类型8.03.02 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()8.03.03 OS_STK_GROWTH8.03.04 OS_TASK_SW()8.04 OS_CPU_A.ASM8.04.01 OSStartHighRdy()8.04.02 OSCtxSw()8.04.03 OSIntCtxSw()8.04.04 OSTickISR()8.05 OS_CPU_C.C8.05.01 OSTaskStkInt()8.05.02 OSTaskCreateHook()8.05.03 OSTaskDelHook()8.05.04 OSTaskSwHook()8.05.05 OSTaskStatHook()8.05.06 OSTimeTickHook()第9章µC/OS-II在Intel 80x86上的移植9.00 开发工具9.01 目录和文件9.02 INCLUDES.H文件9.03 OS_CPU.H文件9.03.01 数据类型9.0302 代码临界区第一章:范例在这一章里将提供三个范例来说明如何使用µC/OS-II。
UC/OS-II内核详解一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。
但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。
内核本身对CPU的占用时间一般在2到5个百分点之间。
UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。
UC/OS-II的内核还可以被裁剪,Hmax中RTOS的就是一个被高度裁剪过的UC/OS-II。
二.任务控制块 OS_TCB:uC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。
减少动态内存分配和释放。
因为依靠优先级进行TCB分配,每个任务必须有自己的优先级,不能和其他任务具有相同的优先级。
typedef struct os_tcb{OS_STK *OSTCBStkPtr;#if OS_TASK_CREATE_EXT_ENvoid *OSTCBExtPtr;OS_STK *OSTCBStkBottom;INT32U OSTCBStkSize;INT16U OSTCBOpt;INT16U OSTCBId;#endifstruct os_tcb *OSTCBNext;struct os_tcb *OSTCBPrev;#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_ENOS_EVENT *OSTCBEventPtr;#endif#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_ENvoid *OSTCBMsg;#endifINT16U OSTCBDly;INT8U OSTCBStat;INT8U OSTCBPrio;INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY;#if OS_TASK_DEL_ENBOOLEAN OSTCBDelReq;#endif} OS_TCB;.OSTCBStkPtr是指向当前任务栈顶的指针。
第一篇UCOS介绍第一篇UCOS介绍这个大家都知道。
呵呵。
考虑到咱们学习的完整性还是在这里唠叨一下。
让大家再熟悉一下。
高手们忍耐一下吧!uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。
为了提供最好的移植性能,uC/OS II 最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
uC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。
其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/O S 的源码发布在该杂志的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只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。