嵌入式μCOSII内核试验三优先级继承

合集下载

uCOSII的特点

uCOSII的特点

笔记一:µC/OS-II的特点µC/OS-II系统是专门为计算机的嵌入式应用而设计的。

µC/OS-II系统中90%的代码是用C语言编写的,CPU硬件相关部分是用汇编语言编写的。

总量约200行的汇编语言部分被压缩到最低限度,便于移植到任何一种其他CPU上,用户只需要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具就可以将µC/OS-II系统嵌入到所要开发的产品中。

µC/OS-II系统具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

其主要特点如下:1)开源性。

µC/OS-II系统的源代码全部公开,用户可以直接登录µC/OS-II的官方网站下载,官方网站公布了针对不同微处理器的移植代码。

这样就使系统变得开放、透明,极大地方便了µC/OS-II系统的开发,提高了开发效率。

2)可移植性。

绝大部分µC/OS-II系统的源码是用移植性很强的ANSI C语句写的,和微处理器硬件部分相关的是用汇编语言写的。

µC/OS-II系统能够移植到多种微处理器的条件是只要该微处理器具有堆栈指针,有CPU内部寄存器入栈、出栈指令。

另外,使用的C编译器必须支持内嵌汇编(inline assembly)或者该C语言可扩展、可连接汇编模块,使得关中断、开中断能够在C语言程序中执行。

3)可固化。

µC/OS-II系统是为嵌入式应用而设计的,只要具备合适的软、硬件工具,µC/OS-II系统就可以嵌入到用户的产品中,成为产品的一部分。

4)可裁剪。

用户可以根据自身需求只使用µC/OS-II系统中应用程序中需要的系统服务,而且这种可裁剪性是依靠条件编译实现的,处理较方便。

5)抢占试。

µC/OS-II系统是完全抢占式的实时内核。

µC/OS-II系统总是运行就绪条件下优先级最高的任务。

嵌入式操作系统uCOS2复习指南

嵌入式操作系统uCOS2复习指南

复习:第一章:实时操作系统、操作系统基本功能、任务、多任务、任务状态及相互关系、任务切换、可重入和不可重入;可剥夺和不可剥夺内核;同步与通信:同步、互斥、临界区、事件、信号量、互斥信号量、消息邮箱、消息队列;中断、时钟、内存管理。

第二章:任务管理:任务控制块TCB数据结构及各数据项意义任务控制块实体任务控制块空闲链表、就绪链表优先级指针表任务堆栈任务就绪表及就绪组及相关代码图2.16:任务状态转换图,要弄清楚任务各状态及转换条件程序2.6,2.7,2.8和2.9,获取就绪任务中的最高优先级,能给出OsRdyGrp和OsRdyTbl后,依据程序,算出最高优先级;并且说明处理时间是恒定的程序2.10、2.11、2.14、2.15、2.17、2.27、2.28、2.29、2.30、2.34分析第三章中断和时间管理中断处理流程,图3.1时钟中断服务,程序3.2,OSTIMETICK(程序2.27)任务延迟函数OSTIMEDLY作用及代码分析(程序3.4)第4章ECB数据结构事件等待组、等待表作用,与就绪组合就绪表有何联系和不同事件控制块空闲链表及ECB初始化函数(程序4.3)事件等待函数(程序4.5)将等待事件就绪(程序4.8)信号管理:OSSEMCREAT、OSSEMDEL、OSSEMPEND、OSSEMPOST4.3.9:信号量应用举例互斥信号管理:OSMutexCreat、OSMutexDEL、OSMutexPEND、OSMUtexPOST优先级反转解决优先级反转采用何种策略4.4.8:互斥信号量应用举例第5章5.1 消息邮箱:OSMBOXCREAT、DEL、PEND、POST5.1.8 例子5.2消息队列:Os_QInit,OsQCreat;POST;PEND消息队列数据结构:图5.8到5.115.2.8 例子第6章内存管理内存控制块数据结构MCB链表Os_MemInit();OsMemCreat();OsMemGet();OsMemPut()设内存区有6个块构成,依次画出4个图:内存块创建后、分配一个块后、再分配两个块后、释放第一次分配的块后的结构图。

μCOS-II嵌入式操作系统

μCOS-II嵌入式操作系统

μC/OS-II嵌入式操作系统Micriμm 公司提供嵌入式软件产品,μC/OS-II,μC/GUI,μC/FS,μC/USB,μC/FL,μC/ModBus, uC/Probe 。

μC/OS-II :一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统。

其绝大部分源码是用ANSI C写的,世界著名嵌入式专家Jean brosse出版的《μC/OS-II,实时内核》(ISDN 1-57820-103-9)详细分析了该内核。

μC/OS-II通过了联邦航空局(FAA)商用航行器认证,符合RTCA(航空无线电技术委员会)DO-178B标准,该标准是为航空电子设备所使用软件的性能要求而制定的。

自1992年问世以来,μC/OS-II已经被应用到数以百计的产品中。

uC/OS-II在高校教学使用是不需要申请许可证的,但将μC/OS-II的目标代码嵌入到产品中去,应当购买目标代码销售许可证。

μC/GUI:一个软件模块集合,通过该模块可以在我们的嵌入式产品中加入用户图形接口(GUI)。

μC/GUI具有很高的执行效率,并且与处理器和LCD控制器相独立。

该模块可以工作在单任务或者多任务环境,可以支持不同大小的显示方式。

μC/FS:一个高度可移植的嵌入式FAT文件系统。

该系统可以用于不同的介质,而用户只需要提供不同设备的驱动函数。

μC/FS是一个经过对速度、多功能性和内存需求等优化的高性能库。

Micrium 推出了uC/Probe ,这款通用工具能让嵌入式开发人员在实时环境中监测嵌入式系统。

有了uC/Probe ,不再需要像以前一样为了得到系统反馈必须停止一个应用程序;有了uC/Probe ,用户可以图形化方式观测正在运行的嵌入式应用程序的内部,这样节省了大量的开发时间;有了uC/Probe ,开发者可以保证系统正确地运行,或者迅速找到系统的不稳定性, 这些不稳定性一般情况下( 不用工具) 在系统运行时才能被发现.Micrium 推出首个工业级通用嵌入式系统监测工具, 荣获2007 美国菲斯卡尔技术论坛“最高级别”开发支持工具, uC/Probe 可以和任意能产生ELF/DWARF 或者IEEE 695 导出文件的编译器/ 连接器一起工作, uC/Probe 同样可和任何8 位16 位32 位和64 位的CPU 以及DSP 一起工作, 有了uC/Probe ,就不必而定制程序或脚本了, 从而节省了开发时间.数据在运行Microsoft Windows 的PC 上以图形化方式来显示,值可以是数字也可以量表,条线图,区图,曲线图,电子显示器,计数器或者圆形分隔统计图表的形式来显示。

ucos ii优先级继承实验

ucos ii优先级继承实验

优先级继承的主要思想是:当高优先级任务因申请某共享资源失败被阻塞时,把当前拥有该资源的、且优先级较低的任务的优先级提升,提升的高度等于这个高优先级任务的优先级。

在ucos ii中,创建管理共享资源的互斥信号量时,可以指定一个PIP(优先级继承优先级),这个很重要,是这个实验的核心。

一个PIP可以用OSMutexCreate()函数来指定,例如
mutex=OSMutexCreate(5,&err);就指定PIP的优先级为5.
例如:Task0的优先级为10,Task1的优先级为9,Task2的优先级为8;三个任务均要使用这个互斥信号量。

当然,先运行的任务就会先申请到这个信号量。

在这里,假设Task0先运行。

并Task1、Task2随后被创建并进入就绪态。

当Task0在使用互斥信号量并延时挂起时,此时Task2优先级最高,所以Task2运行,当想申请该资源时,被阻塞。

这样又返回到Task0中,此时系统将Task0的优先级提升到5,让Task0运行并释放互斥信号量,释放该信号量后,Task0的优先级又返回原来的优先级10.
优先级的继承有以下条件
1、在启动任务前要创建互斥信号量mutex=OSMutexCreate(5,&err);即申请PIP
2、在Task0、1、2使用OSMutexPend(mutex,0,&err);函数来获得信号量的使用权;使用OSMutexPost(mutex);函数来释放互斥信号量的使用权。

关于uCOS-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()程序进行任务调度,执行当前系统中优先级最高的就绪态任务。

北航ARM9嵌入式系统实验实验三uCOS-II实验

北航ARM9嵌入式系统实验实验三uCOS-II实验

北航ARM9嵌⼊式系统实验实验三uCOS-II实验实验三 uCOS-II实验⼀、实验⽬的在内核移植了uCOS-II 的处理器上创建任务。

⼆、实验内容1)运⾏实验⼗,在超级终端上观察四个任务的切换。

2)任务1~3,每个控制“红”、“绿”、“蓝”⼀种颜⾊的显⽰,适当增加OSTimeDly()的时间,且优先级⾼的任务延时时间加长,以便看清三种颜⾊。

3)引⼊⼀个全局变量BOOLEAN ac_key,解决完整刷屏问题。

4)任务4管理键盘和超级终端,当键盘有输⼊时在超级终端上显⽰相应的字符。

三、预备知识1)掌握在EWARM 集成开发环境中编写和调试程序的基本过程。

2)了解ARM920T 处理器的结构。

3)了解uCOS-II 系统结构。

四、实验设备及⼯具1)2410s教学实验箱2)ARM ADS1.2集成开发环境3)⽤于ARM920T的JTAG仿真器4)串⼝连接线五、实验原理及说明所谓移植,指的是⼀个操作系统可以在某个微处理器或者微控制器上运⾏。

虽然uCOS-II的⼤部分源代码是⽤C语⾔写成的,仍需要⽤C语⾔和汇编语⾔完成⼀些与处理器相关的代码。

⽐如:uCOS-II在读写处理器、寄存器时只能通过汇编语⾔来实现。

因为uCOS-II 在设计的时候就已经充分考虑了可移植性,所以,uCOS-II的移植还是⽐较容易的。

要使uCOS-II可以正常⼯作,处理器必须满⾜以下要求:(1)处理器的C编译器能产⽣可重⼊代码可重⼊的代码指的是⼀段代码(如⼀个函数)可以被多个任务同时调⽤,⽽不必担⼼会破坏数据。

也就是说,可重⼊型函数在任何时候都可以被中断执⾏,过⼀段时间以后⼜可以继续运⾏,⽽不会因为在函数中断的时候被其他的任务重新调⽤,影响函数中的数据。

(2)在程序中可以打开或者关闭中断在uCOS-II中,可以通过OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏来控制系统关闭或者打开中断。

这需要处理器的⽀持,在ARM920T的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。

μCOS-II的多任务系统实时性分析与优先级分配

μCOS-II的多任务系统实时性分析与优先级分配

从产品研发的角度,针对小资源系统中使用μC/OS-II的实时性和优先级关系进行了分析。

提出了可删除任务的灵活应用和可变大小任务栈的实现方法,对于并行任务使用共享资源的几种情况给出了实用解决方案。

这些措施获得了良好的任务并行性和实时响应,节约了代码存储空间。

引言μC/OS-II作为一种轻量级的嵌入式实时操作系统,正随着嵌入式微处理器性能的不断提高和外围资源(主要是存储器资源)的不断增加,得到越来越多的应用。

例如,原来的51系列单片机,限于6~12 MHz 的主频、12个Clock的机器周期以及有限的存储器资源,使用μC/OS-II会大大加重系统负担,使应用程序的运行受到影响,特别在快速A/D转换等实时性较强的场合,无法得到及时的响应,于是才有了更轻量级的Small RTOS等操作系统的出现。

但目前更强劲的51内核版本微处理器的大量出现,从根本上改变了这种情况。

40 MHz以上的主频,单周期指令的微处理器,加上64 KB的程序空间和8 KB以上的数据空间,这样的系统已经可以流畅地运行μC/OS-II[1]。

μC/OS-II的移植版本很多,选择一个适合系统CPU的版本,然后进行正确的配置和优化是非常重要的。

1 系统实时性分析本系统工作原理是在恒定温度条件下,任意启动4个测试通道来进行多个项目的并行分析,每个测试通道的工作流程完全相同,如图1所示。

C8051F120集成了8路12位高速A/D转换器(ADC0)和8路8位高速A/D转换器(ADC2)。

系统要求对4个光学传感器输出进行采样,ADC0可以构成4个差分测试通道以满足需求。

系统还要求能对2路温度实现实时控制,用于监控2个外部温度传感器的输出电压:一个保证测试部分的温度恒定在37±0.2 ℃,通过对加热组件的PWM控制来完成;另一个用于监测机箱温度,在32 ℃以上时启动风扇散热,30 ℃以下关闭风扇。

图1 通道工作流程从图1中可以看出,完整的流程包括信息输入、样本预温、通道启动、试剂添加、微分测量、结果处理6个阶段。

μCOS-Ⅱ操作系统

μCOS-Ⅱ操作系统

μC/OS-Ⅱ操作系统的简介2009-05-26 22:06μc/os-ii是由jean brosse于1992年编写的一个嵌入式多任务实时操作系统。

最早这个系统叫做μc/os,后来经过近10年的应用和修改,在1999年jean j.labrosse推出了;μc/os-ii,并在2000年得到了美国联邦航空管理局对用于商用飞机的、符合rtca do178b标准的认证,从而证明μc/os-ii具有足够的稳定性和安全性。

μc/os-ii是一个可裁减、源代码开放、结构小巧、可抢占式的实时多任务内核,是专为微控制器系统和软件开发而设计的,是控制器启动后首先执行的背景程序,并作为整个系统的框架贯穿系统运行的始终。

它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。

采用μc/os-ii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。

μc/os-ii的文件体系结构如图1所示。

图1 μc/os-ii的文件体系结构图基于μC/OS—II的嵌入式构件系统设计2009-05-26 22:08引言近些年来,随着嵌入式产品需求的不断增加,嵌入式软件正变得越来越复杂,而产品的开发周期也越来越短。

嵌入式软件开发迫切需要更高效的软件重用手段。

随着软件复用研究成为热点,其核心技术——构件化软件开发方法(CBD)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。

这种开发方法已在办公应用、电子商务、因特网及分布式网络应用中广泛使用;但在嵌入式领域,构件技术仍处于起步阶段,目前没有一个统一通用的构件规范。

尽管如此,由于基于构件的软件设计方法能够极好地满足嵌入式软件几乎所有的特性(如定制、裁剪、动态演变等),有效缩短产品开发周期,这种设计方法无疑将给嵌入式系统的开发带来巨大的好处。

本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}
源程序说明
3、应用任务
void Task {
/* 无限循环 */
……
OSMutexPend(mutex, 0, &err);
/*申请资源*/
OSTimeDlyHMSM(0, 0, 0, 200);
/*保持资源*/
OSMutexPost(mutex);
/*释放资源*/
OSTimeDlyHMSM(0, 0, 0, (3-id)*150); /*延时*/
……
}
}
运行流程
优先级
8
1
0
10 2 2
2 2 22
22
11
1
1
12
0
1
1
0
t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14
t1时刻任务Task2首先获得mutex
源程序说明
1、应用初始化
? 设置互斥信号量,其中8为PIP(优先级继承优先级)的值 mutex = OSMutexCreate(8,&err);
? 创建起始任务TaskStart OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 9);
输出信息
实验设计
3个应用任务竞争同一互斥资源 mutex; 使用mutex时采用优先级继承策略,PIP(优先级继承 优先级)为8; 它们的原始优先级: TASK0< TASK1< TASK2。
操作系统配置
#define OS_MAX_TASKS
6
/*最多可以创建6个任务*/
#define OS_LOWEST_PRIO
优先级继承的主要思想
S被任务B占用,任务A被挂起
N
Priority(B)<Priority( A)?
任务A申请共享资源S
Y S是否被占用
Y 提升B的优先级到PIP
...... B释放资源s并恢复原来的优先级 等待队列中优先级最高的任务获得s
......
N 任务A获得共享资源S
任务A继续执行 ......
#define OS_TIME_DLY_HMSM_EN 1 /*是否允许使用OSTimeDlyHMSM()*/
#define OS_TICKS_PER_SEC 200 /*设置每秒之内的时钟节拍数目*/
本实验中所用到的 μC/OS-II相关函数
? OSTaskCreate():建立一个新任务 ? OSMutexCreate():创建互斥信号量 ? OSMutexPend():申请互斥信号量 ? OSMutexPost():释放互斥信号量 ?OSTimeDlyHMSM( ):将一个任务延时若干时间
内核实验(三)
优先级继承
实验目的
掌握嵌入式实时操作系统μC/OS-II 解决优先级反转的策略——优先级继 承的原理。
优先级继承的主要思想
当高优先级任务因申请某共享资源失败被 阻塞时,把当前拥有该资源的、且优先级较 低的任务的优先级提升,提升的高度等于这 个高优先级任务的优先级 (可以指定一个 PIP) 。
14
/*任务优先级不可以大于14*/
#define OS_TASK_CREATE_EN 1 /*允许使用OSTaskCreate()*/
#define OS_MAX_EVENTS
1
/*最多可以有1个事件*/
操作系统配置
#define OS_MUTEX_EN
1
/*是否允许使用互斥信号量的功能*/
#define OS_TASK_CHANGE_PRIO_EN 1 /*是否允许使用 OSTaskChangePrio()*/
2、创建应用任务
for (i = 0; i <N_TASKS; i++) {
TaskData[i] = i; /* Each task will pass its own id
*/
OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], 12-i);
源程序说明
TaskStart 负责:
?安装时钟中断服务例程
?ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);
?初始化操作系统时钟
?ucos_timer_init();
?创建应用任务
?TaskStartCreateTasks();
源程序说明
相关文档
最新文档