UCOS-II和UCOS-III的性能对比(官方原版)
UCOS-II-II、FreeRTOS、RTX四大RTOS系统性能对比
UCOS-II/II、FreeRTOS、RTX四大RTOS系统性能对比大家好,感谢社区提供的板卡。
这次的使用对象是安富莱的STM32-V6板卡。
由于之前用过安富莱的V4板卡,所以安富莱给我留下了很深的印象,他们开发板的资料很过硬,售后完善,线上QQ技术支持也很给力,作为学习,确实是一款很不错的板卡。
唯一的是,安富莱很少出视频,其主要是编写PDF教学手册和程序例程。
另外他们的按键检测代码,很紧凑,有单发、连发、长按、短按、上升沿触发、下降沿触发等功能,是我见到最棒的按键检测代码。
STM32-V6是一款基于STM32F429单片机的开发板,整板采用4层板设计,本次选择它的目的,除了测试其能做常用外设开发驱动,安富莱还对它做了一个示波器的例程。
虽然示波器的性能不强,但是去十分有意思。
另外其支持VNC虚拟屏幕功能。
开发者可以不用LCD显示屏幕,直接使用PC屏幕作为自己的开发板屏幕,十分方便。
所以这个板子真的很强大。
拿到板子,在我查看他们的网络示波器例程后,发现安富莱只做了基于RTX的例程,并没有做基于uCOS、FreeRTOS的例程,这样我感到很奇怪。
因为安富莱的每个例程都会做三个OS版本,唯独这个例程却只制作了一个基于RTX的。
他们的技术支持回复是:“FreeRTOS的性能不行,所以对这个网络示波器的的应用来说,没有制作这方面的例程”,这让我感到很疑惑,FreeRTOS作为一款开源RTOS,性能真有这么差么?到底他们之间的差距又有多大?所以才有这次做UCOS-II、UCOS-III、FreeRTOS、RTX系统性能对比测试,本次我只是站在一个使用者的角度,测试四个RTOS单一的系统调度性能。
尽量使4个RTOS处在同一水平上测试:l 使用相同的硬件平台和相同的资源l 单片机都使用相同的主频,只是单片机的Uart资源。
第30讲UCOSII入门
30.1 UCOSII 简介
30.1.1 30.1.2 30.1.3 30.1.4 30.1.5 30.1.6 UCOSII背景知识 UCOSII体系结构 UCOSII基本概念 UCOSII的初始化和启动 UCOSII常用任务管理函数 UCOSII时间管理
广州星翼电子
官方淘宝店:
广州星翼电子 官方淘宝店: 技术支持论坛:
《原子教你玩STM32》系列视频
30.1.2 UCOSII体系结构
用户应用程序
UCOSII
UCOSII与处理器无关的代码 ucos_ii.h ucos_ii.c os_tmr.c os_time.c os_task.c os_sem.c os_q.c os_mutex.c os_mem.c os_mbox.c os_flag.c os_core.c
广州星翼电子
官方淘宝店:
技术支持论坛:
《原子教你玩STM32》系列视频
广州星翼电子
官方淘宝店:
技术支持论坛:
《原子教你玩STM32》系列视频
任务控制块OS_TCB
用来记录任务堆栈指针,任务当前状态以及任务优先级等任务 属性。UCOSII的任何任务都是通过任务控制块(TCB)的东西 来控制的,一旦任务创建了,任务控制块OS_TCB就会被赋值。 每个任务管理块有3个最重要的参数:1,任务函数指针;2, 任务堆栈指针;3,任务优先级;任务控制块就是任务在系统 里面的身份证(UCOSII通过优先级识别任务),任务控制块我 们就不再详细介绍了,详细介绍请参考任哲老师的《嵌入式实 时操作系统UCOSII原理及应用》一书第二章。
UCOSII与应用程序 相关代码 os_cfg.h includes.h
UCOSII与处理器相关的代码(移植时需要修改) os_cpu.h os_cpu_a.asm os_cpu_c.c
嵌入式操作系统_第5章 ucOS-II - 任务就绪表及任务就绪组
0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 2
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 3
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 4
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0
或
y = OSUnMapTbl[OSRdyGrp]; prio = (INT8U)((y << 3)
+ OSUnMapTbl[OSRdyTbl[y]]);
优先级判定表OSUnMapTbl[256] (os_core.c)
举例: 如OSRdyGrp的值为
00101000B,即0X28,则 查得 OSUnMapTbl[OSRdyGrp] 的值是3,它相应于 OSRdyGrp中的第3位置1;
图5-6 在就绪表中查找最高优先级别任务的过程
从任务就绪表中获取优先级别最高的就绪任务可用如下 类似的代码:
y = OSUnMapTal[OSRdyGrp]; //D5、D4、D3位
x = OSUnMapTal[OSRdyTbl[y]]; //D2、D1、D0位
prio = (y<<3)+x;
//优先级别
};
优先级判定表OSUnMapTbl[256]
OSUnMapTbl[]这个数组的生成原则:先 把一个数用二进制表示,然后从低位往高 位数,返回第一次碰到1的位置。比如: OSUnMapTbl[0x111100(60)] = 2。可 以看到,如果要表示8位数的对应关系, 则数组的大小为2^8=256。这也是为什么 OSRdyTbl[],OSRdyGrp采用8位的原因。
uC-OS-III的特点
uC/OS-III的特点uC/OS-III简介uC/OS-III(Micro C OS Three 微型的C 语言编写的操作系统第3版)是一个可升级的,可固化的,基于优先级的实时内核。
它对任务的个数无限制。
uC/OS-III 是一个第3 代的系统内核,支持现代的实时内核所期待的大部分功能。
例如资源管理,同步,任务间的通信等等。
然而,uC/OS-III 提供的特色功能在其它的实时内核中是找不到的,比如说完备的运行时间测量性能,直接地发送信号或者消息到任务,任务可以同时等待多个内核对象等。
uC/OS-III 是一个可扩展的,可固化的,抢占式的实时内核,它管理的任务个数不受限制。
它是第三代内核,提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。
uC/OS-III 也提供了很多特性是在其他实时内核中所没有的。
比如能在运行时测量运行性能,直接得发送信号或消息给任务,任务能同时等待多个信号量和消息队列。
uC/OS-III主要特点1、时间片轮转调度:uC/OS-III 允许多个任务拥有相同的优先级。
当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。
uC/OS-III 会分配用户定义的时间片给每个任务去运行。
每个任务可以定义不同的时间片。
当任务用不完时间片时可以让出CPU 给另一个任务。
2、抢占式多任务处理:uC/OS-III 是一个抢占式多任务处理内核,因此,uC/OS-III 正在运行的经常是最重要的就绪任务。
3、快速响应中断:uC/OS-III 有一些内部的数据结构和变量。
uC/OS-III 保护临界段可以通过锁定调度器代替关中断。
因此关中断的时间会非常少。
这样就使uC/OS-III 可以响应一些非常快的中断源了。
4、确定性的:uC/OS-III 的中断响应时间是可确定的,uC/OS-III 提供的大部分服务的执行时间也是可确定的。
5、易移植的:uC/OS-III 可以被移植到大部分的CPU 架构中。
uCOS-II的介绍和uCOS-II在单片机使用中的一些特点资料概述
uCOS-II的介绍和uCOS-II在单片机使用中的一些特点资料概述早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。
但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。
但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。
这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的uC/OS-II。
uC/OS-II的特点1.uC/OS-II是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。
这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。
缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。
2.uC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。
这个特点使得它的实时性比非占先式的内核要好。
通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。
拿51单片机为例,比较一下就可以发现这样做的好处。
假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。
所以经常采用的方法是置一标志位,然后退出中断。
由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。
但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。
如果使用uC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。
关于uCOS-II中优先级翻转问题
关于uC/OS-II中优先级翻转问题■ 山东大学 秦绍华 陈涤1uC/OS-II的运行机制在嵌入式系统的应用中,实时性是一个重要的指标,而优先级翻转是影响系统实时性的重要问题。
本文着重分析优先级翻转问题的产生和影响,以及在uC/OS-II中的解决方案。
uC/OS-II采用基于固定优先级的占先式调度方式,是一个实时、多任务的操作系统。
系统中的每个任务具有一个任务控制快OS_TCB,任务控制块记录任务执行的环境,包括任务的优先级,任务的堆栈指针,任务的相关事件控制块指针等。
内核将系统中处于就绪态的任务在就绪表(ready list)进行标注,通过就绪表中的两个变量OSRdyGrp和OSRdyTbl[]可快速查找系统中就绪的任务。
在uC/OS-II中每个任务有唯一的优先级,因此任务的优先级也是任务的唯一编号(ID),可以作为任务的唯一标识。
内核可用控制块优先级表OSTCBPrioTbl[]由任务的优先级查到任务控制块的地址。
uC/OS-II主要就是利用任务控制快OS_TCB、就绪表(ready list)和控制块优先级表OSTCBPrioTbl[]来进行任务调度的。
任务调度程序OSSched()首先由就绪表(ready list)中找到当前系统中处于就绪态的优先级最高的任务,然后根据其优先级由控制块优先级表OSTCBPrioTbl[]取得相应任务控制块的地址,由OS_TASK_SW()程序进行运行环境的切换。
将当前运行环境切换成该任务的运行环境,则该任务由就绪态转为运行态。
当这个任务运行完毕或因其它原因挂起时,任务调度程序OSSched()再次到就绪表(ready list)中寻找当前系统中处于就绪态中优先级最高的任务,转而执行该任务,如此完成任务调度。
若在任务运行时发生中断,则转向执行中断程序,执行完毕后不是简单的返回中断调用处,而是由OSIntExit()程序进行任务调度,执行当前系统中优先级最高的就绪态任务。
CPU解析
1333MHz的FSB所提供的内存带宽是1333MHz×64bit/8=10667MB/s=10.67GB/s
DMI总线直接媒体接口,是Intel公司开发用于连接主板南北桥的总线,取代了以前的Hub-Link总线。DMI采用点对点的连接方式,具有PCI-E总线的优势。DMI实现了上行与下行各1GB/s的数据传输率,总带宽达到2GB/s。
其次,第三代处理器的四核心的散热设计功耗最高为77W,相比于第二代的95W大幅降低了19%,当然四核心还会有65W低功耗、45W超低功耗两个版本,第三代双核心热设计功耗最高55W,比第二代的65W也降低了15%,同时还会有35W低功耗版本。
工作生活领域的Core i3、商务领域的Core i5、发烧友领域的Core i7字母后缀依然有X、K、S、T四种,分别代表至尊版、无锁倍频版、性能优化低功耗版、超低功耗版。
内存带宽计算公式:带宽=内存时钟频率×内存总线位数×倍增系数/8。以DDR400内存为例,它的运行频率为200MHz,数据总线位数为64bit,由于上升沿和下降沿都传输数据,因此倍增系数为2,此时带宽为:200×64×2/8=3.2GB/s(如果是两条内存组成的双通道,那带宽则为6.4 GB/s)。
其次i5、i7支持睿频加速技术(英特尔睿频加速技术让处理器按需要输出性能和功耗,达到高性能和高能效)i3不支持睿频加速技术;
i3、i7支持超线程技术(提供每个物理内核两个处理线程,可以完成更多的工作,减少了CPU的闲置时间,提高的CPU的运行效率,从而更快的完成任务)i5不支持超线程技术;
当然它们的价格也不同,第三代的i3的价格大约在850左右,i5的价格在1500左右,i7的价格一般高于2000
UCOS-II和UCOS-III的性能对比(中文)
1-5 uC/OS,uC/OS-II,uC/OS-III 的性能对比
表 1.1 列出了 uC/OS 的演变,比较每个版本的区别。
功能
uC/OS
uC/OS-II uC/OS-III
诞生年份
1992
1998
2009
书
有
有
有
提供源代码
是
是
是
抢占式多任务
是
是
是
最大任务数
64
256
是
申请中
是
申请中
是
申请中
是
申请中
表 1-1
无限制
每个优先级的任务 1
1
无限制
数
时间片轮转
否
否
是
信号量
是
是
是
互斥信号量
否
是
是(可嵌套的)
事件标志
否
是
是
消息邮箱
是
是
否(不需要了)
消息队列
是
是
是
固定大III 中文资料
不通过信号量标记 否
一个任务
不通过消息队列发 否
消息给任务
软件定时器
否
任务停止/恢复
否
死锁预防
是
可扩展的
否
是
是
是
否
是
uC/OS-III 中文资料
任务级的时基定时 否
器处理
提供的服务
~20
MISRA-C:1998
否
MISRA-C:2004
否
DO178B
否
EUROCAE ED-12B
FDA 认证
否
SIL3/SIL4 IEC
uCOSiii对消息队列的改进
uC/OS iii对消息队列的改进摘要:在uc/os-ii的基础上,uc/os-iii对消息队列做了较大的改进,并新增一项特有的功能:任务内建消息队列。
任务内建消息队列不仅可以降低消息队列占用的存储空间、提高消息与任务间的通信效率,还能实现消息与任务的相互一一对应,从而保证了系统的健壮性。
关键词:消息队列;任务内建消息队列;嵌入式操作系统depth analysis of uc/os-iii’s message queue and task built-in message queuequ huan-yu,chen li-ping, tang xiao-mei(school of mathematics,physics and informaiton engineering, jiaxing university,jiaxing 314001,china)abstract: on the basis of uc/os-ii, uc/os-iii has made a great improvement on it’s message queue function,and add a unique function: the task built-in message queue.task built-in message queue can not only reduce the occupancy storage space of message queue、improve the communication efficiency of messages and tasks, but also can realize one-to-one correspondence between tasks and messages,ensure the system’s robustnesskey words: message queues;task built-in message queue;embedded operation system多任务调度系统中,任务间互相通信的方法可以是共享全局变量、共享内存、信号量等。
uCosIII学习
uCosIII 学习本人前言:很久没有练习英语了,本想发点时间在工作之余,翻译一下μC/OS III用户手册,发现还是有点吃力,于是乎,参见网络上的嘉兴学院的屈环宇同学的译本,谢谢!前言做为Micrium公司推出的第三代操作系统,μC/OS III 支持现代的实时内核所期待的大部分功能;μC/OS III是一个可裁剪、可固化、基于优先级的实时内核,支持例如资源管理、同步、任务间的通信等等。
同时μC/OS III也具备一些很有特色的功能,是很多的其他的实时内核所不具备的,比如完备的实际测量性能、直接发送信号或消息到任务、任何可同时等待多个内核对象等。
与第二代μC/OS II相比,μC/OS III更加优秀,μC/OS III中删除或更新了μC/OS II中很少使用的一些功能;添加了更高效的功能和服务,比如时间片轮转调度(round robin)等,μC/OS II最多支持64个任务,而μC/OS III在理论上任务数量没有限第一章介绍实时系统软实时系统和硬实时系统的区别在于一旦没有在规定的时间内完成任务所导致后果的严重性。
超过时限后所得到的结果即使正确也可能是毫无作用的。
硬实时系统中,运算超时是不允许发生的。
在很多情况下,超时会导致巨大的灾难,会威胁人们的生命安全。
但是在软实时系统中,超时不会导致严重后果。
前后台系统简单的小型系统设计一般是基于前后台的或者无限循环的系统。
包含一个无限循环的模块实现需要的操作(后台)。
中断处理程序实现异步事件(前台)。
前台也叫做中断级,后台也叫作任务级。
多数高产量低成本微控制器的应用软件(例如微波炉,电话玩具等)都是基于前后台系统的。
实时内核实时内核是一个能管理MPU、MCU、DSP时间和资源的软件。
实时内核的应用包括迅速地响应,可靠地完成工作的各个部分。
ucos(一)ucos系统简介
ucos(⼀)ucos系统简介⼀、概述 µC/OS-II由Micrium公司提供,是⼀个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适⽤于多种微处理器,微控制器和数字处理芯⽚(已经移植到超过100种以上的微处理器应⽤中)。
同时,该系统源代码开放、整洁、⼀致,注释详尽,适合系统开发。
µC/OS-II已经通过联邦航空局(FAA)商⽤航⾏器认证,符合航空⽆线电技术委员会(RTCA)DO-178B标准。
现在最新版的是µC/OS-III。
⼆、性质µC/OS-II被⼴泛应⽤于微处理器、微控制器和数字信号处理器。
µC/OS-II 的前⾝是µC/OS,最早出⾃于1992 年美国嵌⼊式系统专家Jean brosse 在《嵌⼊式系统编程》杂志的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良好的可扩展性和源码开放,这些⾮必须的功能完全可以由⽤户⾃⼰根据需要分别实现。
嵌入式实时操作系统uCOS-III
目录第一部分:μC/OS-III 实时内核μC/OS-III的演变—Jack Ganssle前言第1章概述1-1前后台系统1-2实时内核1-3RTOS(实时操作系统)1-4μC/OS-III1-5μC/OS,μC/OS-II,μC/OS-III特性比较1-6关于本书1-7μC/Probe 调试软件工具1-8本书的常用约定1-9各章内容第2章目录和文件2-1 应用代码2-2 CPU2-3 板级支持包(BSP)2-4 μC/OS-III,与CPU无关的源代码2-5 μC/OS-III,与CPU相关的源代码2-6 μC/CPU,与CPU相关的源代码2-7 μC/LIB,可移植的库函数2-8 小结第3章初识μC/OS-III3-1 单任务应用程序3-2 有内核对象参与的多任务应用程序第4章临界段代码4-1 关中断4-1-1 测量中断关闭时间4-2 给调度器上锁4-2-1 测量调度器锁定时间4-3 μC/OS-III的某些功能会导致临界段代码长度增加4-4 小结第5章任务管理5-1 任务优先级的分配5-2 栈空间大小的确定5-3 任务栈溢出检测5-4 任务管理函数5-5 任务管理的内部原理5-5-1 任务状态5-5-2 任务控制块TCB5-6 系统内部任务5-6-1 空闲任务(OS_IdleTask(),os_core.c)5-6-2 时钟节拍任务(OS_TickTask(), os_tick.c)5-6-3 统计任务(OS_StatTask(),os_stat.c)5-6-4 定时任务(OS_TmrTask(),os_tmr.c)5-6-5 中断服务管理任务(OS_IntQTask(),os_int.c)5-7小结第6章任务就绪表6-1 优先级6-2 就绪任务列表6-3 向就绪任务列表中增加任务6-4小结第7章任务调度7-1 可剥夺型调度7-2 调度点7-3 时间片轮转调度7-4 调度的实现细节7-4-1 OSSched()7-4-2 OSIntExit()7-4-3 OS_SchedRoundRobin()7-5 小结第8章任务切换8-1 OSCtxSw()8-2 OSIntCtxSw()8-3小结第9章中断管理9-1 CPU的中断处理9-2 典型的μC/OS-III中断服务程序9-3 无需内核参与的中断服务程序9-4 多中断优先级的处理器9-5 所有中断源共用中断服务程序9-6 每个中断源都有专用中断服务程序9-7 直接发布和延时发布9-7-1 直接发布9-7-2 延迟发布9-8 直接发布模式和延迟发布模式的对比9-9 时钟节拍(也称为系统节拍)9-10小结第10章任务挂起表10-1 小结第11章时间管理11-1 OSTimeDly()11-2 OSTimeDlyHMSM()11-3 OSTimeDlyResume()11-4 OSTimeSet() 和OSTimeGet()11-5 OSTimeTick()11-6 小结第12章定时器管理12-1 单次定时器12-2 周期定时器(无初始延迟)12-3 周期定时器(有初始延迟)12-4 定时器管理内部机制12-4-1 定时器管理内部机制——定时器状态12-4-2 定时器管理内部机制——OS_TMR12-4-3 定时器管理内部机制——定时器任务12-4-4 定时器管理内部机制——定时器列表12-5 总结第13章资源管理13-1 关中断/开中断13-2 给调度器上锁/开锁13-3 信号量13-3-1 二进制信号量13-3-2 计数型信号量13-3-3 使用信号量的注意事项13-3-4 (用来共享资源的)信号量内部结构13-3-5 优先级反转13-4 互斥型信号量(MUTEX)13-4-1 互斥型信号量内部结构13-5 何时可以用普通信号量替代互斥型信号量13-6 死锁(或称抱死)13-7 小结第14章任务同步14-1 信号量14-1-1 单向同步14-1-2 信用记录14-1-3 多个任务等待同一个信号量14-1-4 信号量的内部结构(以同步为目的)14-2 任务信号量14-2-1 等待任务信号量14-2-2 发布任务信号量14-2-3 双向同步14-3 事件标志组14-3-1 使用事件标志14-3-2 事件标志的内部结构14-4 与多任务同步14-5 小结第15章消息传递15-1 消息15-2 消息队列15-3 任务内建的消息队列15-4 双向同步15-5 流量控制(flow control)15-6 保持数据的可见性15-7 使用消息队列15-8 客户端和服务器15-9 消息队列内部的细节15-10 小结第16 章同时等待多个内核对象16-1 小结第17章存储管理17-1 创建存储分区17-2 从分区中获得存储块17-3 将存储块归还到分区中17-4 使用存储分区17-5 小结第18章移植µC/OS-Ⅲ18-1 约定18-2 μC/CPU18-2-1 CPU_BSP.H18-2-2 CPU_DEF.H18-2-3 CPU_CFG.H18-2-4 CPU_CORE.C18-2-5 CPU_CORE.H18-2-6 CPU.H18-2-7 CPU_C.C18-2-8 CPU_A.ASM18-3 μC/OS-III移植18-3-1 OS_CPU.H18-3-2 OS_CPU_C.C18-3-3 OS_CPU_A.ASM18-3-4 OS_CPU_A.INC18-4 板级支持包(BSP)18-4-1 BSP.C和BSP.H18-4-2 BSP_INT.C和BSP_INT.H18-5 移植的测试18-5-1 创建一个简单的测试工程18-5-2 验证任务级任务切换18-5-3 验证中断级任务切换18-6 小结第19章程序运行时的各类统计信息19-1程序运行时的总体统计19-2 任务运行时的统计19-3 程序运行时和内核对象相关的统计信息19-4 OS_DBG.C –统计19-5 OS_CFG_APP. C –统计19-6 小结附录A μC/OS-III API参考手册A-1 任务管理A-2 时间管理A-3 互斥型信号量——资源管理A-4 事件标志组——同步A-5 信号量——同步A-6 任务信号量——同步A-7 消息队列——消息传递A-8 任务消息队列——消息传递A-9 等待多个对象A-10 定时器A-11 固定大小的存储分区——存储管理A-12 OSCtxSw()A-13 OSFlagCreate()A-14 OSFlagDel()A-15 OSFlagPend()A-16 OSFlagPendAbort()A-17 OSFlagPendGetFlagsRdy()A-18 OSFlagPost()A-19 OSIdleTaskHook()A-20 OSInit()A-21 OSInitHook()A-22 OSIntCtxSw()A-23 OSIntEnter()A-24 OSIntExit()A-25 OSMemCreate()A-26 OSMemGet()A-27 OSMemPut()A-28 OSMutexCreate()A-29 OSMutexDel()A-30 OSMutexPend()A-31 OSMutexPendAbort()A-32 OSMutexPost()A-33 OSPendMulti()A-34 OSQCreate()A-35 OSQDel()A-36 OSQFlush()A-36 OSQPend()A-38 OSQPendAbort()A-32 OSQPost()A-41 OSSched()A-42 OSSchedLock()A-43 OSSchedRoundRobinCfg() A-44 OSSchedRoundRobinYield() A-45 OSSchedUnlock()A-46 OSSemCreate()A-47 OSSemDel()A-48 OSSemPend()A-49 OSSemPendAbort()A-50 OSSemPost()A-51 OSSemSet()A-52 OSStart()A-53 OSStartHighRdy()A-54 OSStatReset()A-55 OSStatTaskCPUUsageInit() A-56 OSStatTaskHook()A-57 OSTaskChangePrio()A-58 OSTaskCreate()A-59 OSTaskCreateHook()A-60 OSTaskDel()A-61 OSTaskDelHook()A-62 OSTaskQFlush()A-63 OSTaskQPend()A-64 OSTaskQPendAbort()A-65 OSTaskQPost()A-66 OSTaskRegGet()A-67 OSTaskRegSet()A-68 OSTaskReturnHook()A-69 OSTaskResume()A-70 OSTaskSemPend()A-71 OSTaskSemPendAbort()A-72 OSTaskSemPost()A-73 OSTaskSemSet()74 OSStatTaskHook()A-75 OSTaskStkChk()A-76 OSTaskStkInit()A-77 OSTaskSuspend()A-78 OSTaskSwHook()A-79 OSTaskTimeQuantaSet()A-80 OSTickISR()A-81 OSTimeDly()A-82 OSTimeDlyHMSM()A-83 OSTimeDlyResume()A-84 OSTimeGet()A-85 OSTimeSet()A-86 OSTimeTick()A-87 OSTimeTickHook()A-88 OSTmrCreate()A-89 OSTmrDel()A-90 OSTmrRemainGet()A-91 OSTmrStart()A-92 OSTmrStateGet()A-93 OSTmrStop()A-94 OSVersion()附录B μC/OS-III配置手册B-1 μC/OS-III的功能(os_cfg.h)B-2μC/OS-III的数据类型(os_type.h)B-3 μC/OS-III的堆栈、池和其他数据类型(os_cfg_app.h)附录C从μC/OS-II 迁移到μC/OS-IIIC-1源文件名称和内容的差异C-2编程约定的变化C-3变量名称的变化C-4 API的变化C-4-1事件标志C-4-2消息邮箱C-4-3存储管理C-4-4互斥型信号量C-4-5消息队列C-4-6信号量C-4-7任务管理C-4-8时间管理C-4-9定时器管理C-4-10其他C-4-11介入函数与系统移植附录D MISRA-C:2004和μC/OS-III D-1 MISRA-C:2004,规则8.5 (强制)D-2 MISRA-C:2004,规则8.12(强制)D-3 MISRA-C:2004,规则14.7 (强制)D-4 MISRA-C:2004,规则15.2 (强制)D-5 MISRA-C:2004,规则17.4 (强制)附录E 参考文献附录F μC /OS-III许可政策致中国读者这本书是很多人多年辛勤劳动的结晶,讲述的是一个最早于1992年发布的实时内核的第三代。
uCOS-II内核分析
UC/OS-II内核分析Silence.Wang一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配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是指向当前任务栈顶的指针。
uCOSII原理及应用
任务控制块
用于存储任务的运行状态和控制信息,包括任 务的优先级、状态、堆栈指针等。
任务切换函数
用于实现任务之间的切换,包括保存当前任务的上下文和恢复下一个任务的上 下文。
ucosii的任务管理
创建任务
通过调用ucosii提供的函数, 创建新的任务并分配相应的 资源。
在物联网应用中,ucosii能够为各种智能硬件提供统一的操 作系统平台,实现设备的互联互通和智能化管理。同时, ucosii还提供了丰富的中间件和驱动程序,方便开发者快速 开发出各种智能硬件和应用软件。
ucosii在嵌入式系统中的应用
嵌入式系统是指嵌入到硬件中的计算机系统,具有特定的功能和性能要求。ucosii作为一种实时操作 系统,在嵌入式系统中也有着广泛的应用。
调试工具
使用JTAG、SWD等调试工具,通过串口、网络等方式与目标板进行通信,实现程序的 下载、运行、断点设置等操作。
调试步骤
首先确认硬件连接正确,然后通过调试工具将程序下载到目标板中,设置断点并运行程 序,观察程序运行过程中变量的变化和程序的执行流程。
常见问题
硬件连接问题、调试工具配置问题、程序编译错误等。
ucosii的性能分析
性能指标
响应时间、吞吐量、资源利用率等。
分析方法
通过代码审查、性能测试、瓶颈分析等方法,找出影响性能的 关键因素,如算法复杂度、内存访问模式、IO性能等。
优化建议
针对分析结果,提出优化建议,如改进算法、优化数据结 构、减少IO操作等。
ucosii的优化建议
算法优化
通过改进算法,减少计算量和复杂度,提高程序执行效率。
易用性
uCOS-II简介
4.1OC/OS-II简介UC/OS-II 是一种基于优先级的可抢先的硬实时内核。
自从92 年发布以来,在世界各地都获得了广泛的应用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40 多种不同结构的CPU 上,运行在从8 位到64 位的各种系统之上。
尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA 认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。
鉴于UC/OS-II 可以免费获得代码,对于嵌入式RTOS 而言,选择UC/OS 无疑是最经济的选择。
需要说明的是,UC/OS-II 作为一个实时操作系统只提供了多任务调度等基本功能,这在实际应用中显然是不够的。
除了移植好的操作系统内核部分,还必须有文件系统,全部硬件的驱动程序,图形API,控件函数,综合提高的消息函数以及几个系统必须的基本任务,象键盘,触摸屏,LCD 刷新等。
有了这些,UC/OS-II 才能实现复杂的功能。
特殊需求的地方还需要像USB通信协议,TCP/IP 协议等更复杂的软件模块。
博创提供的UC/OS-II 库文件中包含了上述大部分功能,基于库的开发变的非常简单,在基本的程序框架下应用我们提供的丰富API 函数即可。
实际开发中,用户的工程中无需包括UC/OS-II 的源代码,只需要包括库文件即可。
当然,用户也可以了解库中部分代码的源文件,可以根据自己的需求就行重新编译,也可以对自己的一系列源文件生成一个专门的库,方便自己后续工作。
UC/OS-II 的开发中,应用程序和操作系统是绑在一起编译的,所生成的system.bin 文件是唯一的可执行文件,其中包括了所需要的UC/OS-II 代码和被用到的驱动程序等函数代码,以及应用程序的代码。
system.bin 文件是存放在平台的16M FLASH 中的,在系统启动时由BIOS依靠文件系统从FLASH 中读入到SDRAM 中,然后把控制转移到该代码上,完成所谓的引导。
uC_OS-II的特点
早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。
但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。
但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。
这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的uC/OS-II。
uC/OS-II的特点1.uC/OS-II是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。
这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。
缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。
2.uC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。
这个特点使得它的实时性比非占先式的内核要好。
通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。
拿51单片机为例,比较一下就可以发现这样做的好处。
假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。
所以经常采用的方法是置一标志位,然后退出中断。
由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。
但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。
如果使用uC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。
UCOS-II和UCOS-III的性能对比(中文)
1-5 uC/OS,uC/OS-II,uC/OS-III 的性能对比
表 1.1 列出了 uC/OS 的演变,比较每个版本的区别。
功能
uC/OS
uC/OS-II uC/OS-III
诞生年份
1992
1998
2009
书
有
有
有
提供源代码
是
是
是
抢占式多任务
是
是
是
最大任务数
64
256
是
申请中
是
申请中
是
申请中
是
申请中
表 1-1
是
代码段需求
3K 到 8K
数据段需求
1K+
可固化
是
在运行时配置
否
编译时配置
是
每个对象命名
否
挂起多个对象
否
任务寄存器
否
嵌入的测量功能 否
用户可定义的 hook 否
函数
时间戳
否
嵌入的内核调试 否
汇编可优化
否
否
是
否
是
是 是 是 是 6K 到 26K 1K+ 是 否 是 是 是 是 有限制 是
是 是(可嵌套的) 是 是 6K 到 20K 1K+ 是 是 是 是 是 是 大量的 是
否
是
是
是
否
是
uC/OS-III 中文资料
任务级的时基定时 否
器处理
提供的服务
~20
MISRA-C:1998
否
MISRA-C:2004
否
DO178B
否
EUROCAE ED-12B
如何选择ARMCPU的操作系统
如何选择ARMCPU的操作系统从8位/16位单片机进展到以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。
更重要的是嵌入式操作系统对应用程序能够起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件,并易于在不同的ARM核的嵌入式处理器上移植。
嵌入式操作系统都具有一定的实时性,易于裁剪和伸缩,能够适合于从ARM7到Xscale各种ARM CPU和各种档次的应用,嵌入式操作系统能够使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和RealView等,也能够使用开发软件,如GCC/GDB、KDE或Eclipe 开发环境,市场上还有专用的开发工具,如Tornado、mC/View、mC/KA、CODE/Lab、Metroworks等。
本文就目前国内在ARM CPU上广泛采纳的三种嵌入式操作系统(uCOS-II、uCLinux和嵌入式Linux)作分析。
uCOS-II嵌入式实时内核全世界数百种设备差不多在使用uCOS-II,包括手机、路由器、不间断电源、飞行器、医疗设备和工业操纵设备。
uCOS-II 差不多有ARM7TDMI、ARM9和Strong ARM等各种ARM CPU的移植,支持包含Atmel、Hynix、Intel、Motorola、Philips、Samsung、Sharp等公司的ARM核的CPU。
uCOS-II的移植也相当容易,与CPU相关的代码包装在三个文件中,它们是os_cpu.h、os_cpu_a.asm和os_cpu_c.c。
uCOS-II有60多个系统调用,覆盖任务、定时器、信号量、事件标志、邮箱、队列和内存治理,差不多包含了传统嵌入式操作系统内核(如PSOS,VRTX)的功能,还支持互斥型信号量,这是90年代的嵌入式操作系统内核,如VxWorks和VRTXsa才有的技术。
uCOS-II因为是可抢占的实时内核,因此uCOS-II与商业嵌入式实时内核在性能上没有什么差异,uCOS-II没有用户态和内核态,任务(线程)或中断和任务切换的响应能够专门快,要紧是和ARM CPU相关的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
Chapter 1
1-5 μC/OS, μC/OS-II AND μC/OS-III FEATURES COMPARISON
Table1-1 shows the evolution of μC/OS over the years, comparing the features available in each version.
FeatureμC/OSμC/OS-IIμC/OS-III
Year introduced199219982009
Book Yes Yes Yes
Source code available Yes Yes Yes
Preemptive Multitasking Yes Yes Yes
Maximum number of tasks64255Unlimited
Number of tasks at each priority level11Unlimited
Round Robin Scheduling No No Yes
Semaphores Yes Yes Yes
Mutual Exclusion Semaphores No Yes Yes (Nestable)
Event Flags No Yes Yes
Message Mailboxes Yes Yes No (not needed)
Message Queues Yes Yes Yes
Fixed Sized Memory Management No Yes Yes
Signal a task without requiring a semaphore No No Yes
Option to Post without scheduling No No Yes
No No Yes Send messages to a task without requiring a
message queue
Software Timers No Yes Yes
Task suspend/resume No Yes Yes (Nestable)
Deadlock prevention Yes Yes Yes
Scalable Yes Yes Yes
Code Footprint3K to 8K6K to 26K6K to 24K
Data Footprint1K+1K+1K+
ROMable Yes Yes Yes
24
25
Introduction
1
Table 1-1 μC/OS, μC/OS-II and μC/OS-III Features Comparison Chart
Run-time configurable No No Yes Compile-time configurable Yes Yes Yes ASCII names for each kernel object No Yes Yes Pend on multiple objects No Yes Yes Task registers
No Yes Yes Built-in performance measurements No Limited Extensive User definable hook functions No Yes Yes Time stamps on posts
No No Yes Built-in Kernel Awareness support
No Yes Yes Optimizable Scheduler in assembly language No No Yes Catch a task that returns No No Yes Tick handling at task level No No Yes Source code available Yes Yes Yes Number of services ~20~90~70MISRA-C:1998
No
Yes (except 10 rules)
N/A
MISRA-C:2004No
No Yes
(except 7 rules)DO178B Level A and EUROCAE ED-12B No Yes In progress Medical FDA pre-market notification (510(k))and pre-market approval (PMA)
No
Yes
In progress
SIL3/SIL4 IEC for transportation and nuclear systems No Yes In progress IEC-61508
No
Yes
In progress
Feature
μC/OS μC/OS-II μC/OS-III。