第4讲嵌入式实时操作系统COS-Ⅱ分析
- 格式:pdf
- 大小:1.44 MB
- 文档页数:22
嵌入式实时操作系统uCOS-II(中文版)第一章:范例在这一章里将提供三个范例来说明如何使用µC/OS-II。
笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用µC/OS-II。
在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。
这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。
这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。
笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。
用户只需要简单地编译、链接和执行。
其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
1.00 安装µC/OS-II本书附带一张软盘包括了所有我们讨论的源代码。
是假定读者在80x86,Pentium,或者Pentium-II处理器上运行DOS或Windows95。
至少需要5Mb硬盘空间来安装uC/OS-II。
请按照以下步骤安装:1.进入到DOS(或在Windows 95下打开DOS窗口)并且指定C:为默认驱动器。
2.将磁盘插入到A:驱动器。
3.键入 A:INSTALL 【drive】注意『drive』是读者想要将µC/OS-II安装的目标磁盘的盘符。
INSTALL.BAT 是一个DOS的批处理文件,位于磁盘的根目录下。
它会自动在读者指定的目标驱动器中建立\SOFTWARE目录并且将uCOS-II.EXE文件从A:驱动器复制到\SOFTWARE并且运行。
.OSTCBOpt 存放有关任务的附加信息。
当用户将OS_TASK_CREATE_EXT_EN设为1 时,这个变量才有效。
通过设置该选项,可起用任务栈检查功能。
例如:作为参数传给OSTaskCreateExt()。
μC/OS-Ⅱ目前只支持 3 个选择项:OS_TASK_OTP_STK_CHK, OS_TASK_OPT_STK_CLR 和OS_TASK_OPT_SAVE_FP 。
OS_TASK_OTP_STK_CHK 用于告知TaskCreateExt(),在任务建立的时候任务栈检验功能得到了允许。
S_TASK_OPT_STK_CLR 表示任务建立的时候任务栈要清零,只有在用户需要有栈检验功能时,才需要将栈清零。
如果不定义OS_TASK_OPT_STK_CLR,而后又建立、删除了任务,栈检验功能报告的栈使用情况将是错误的。
假如任务一旦建立就决不会被删除,且用户初始化时,已将RAM 清过零,就不需要再定义OS_TASK_OPT_STK_CLR,这样可以节约程序执行时间。
传递了OS_TASK_OPT_STK_CLR 将增加TaskCreateExt()函数的执行时间,因为要将栈空间清零。
栈容量越大,清零花的时间越长。
最后一个选择项OS_TASK_OPT_SAVE_FP 通知TaskCreateExt(),任务要做浮点运算。
如果微处理器有硬件的浮点协处理器,则所建立的任务在做任务调度切换时,会保存浮点寄存器的内容。
.OSTCBId 用于存储任务的识别码。
该变量现在没有使用,留给将来扩展用。
.OSTCBNext 和.OSTCBPrev 用于任务控制块OS_TCBs 的双向使用表链接,该链表在时钟节拍函数OSTimeTick()中使用,用于刷新各个任务的任务延迟变量.OSTCBDly。
OSTCBNext、OSTCBPrev:用于将任务控制块OS_TCB插入到空闲链表;或在任务建立的时候链接到双向使用链表中;或在任务删除的时候从链表中被删除。
根据给定的优先级通过设定就续表,使任务进入就绪态(参见程序清单L3.1.7)的例子:●假设要使优先级为12的任务进入就绪状态,12(1100b)即任务的标识号,就是要将OSRdyTbl[1]的第4位置1,且将OSRdyGrp的第1位置1。
依照算法,将该任务放入就绪表的相应数学表达式为:OSRdyGrp |=0x02 ;OSMapTbl[12>>3]OSRdyTbl[1] |=0x10 ;OSMapTbl[4]●而要让优先级为21的任务进入就绪态,21(10101b)即任务的标识号,就是要将OSRdyTbl[2]的第5位置1,且将OSRdyGrp的第2位置1。
依照算法,将该任务放入就绪表的相应数学表达式为:OSRdyGrp |=0x04 ;OSMapTbl[21>>3]OSRdyTbl[2] |=0x20 ;OSMapTbl[5]从上面的计算可知:若要将OSRdyGrp及OSRdyTbl[]的第n位置1,可通过分别把OSRdyGrp及OSRdyTbl[]的值与2n 相或来实现。
在μC/OS-Ⅱ中,已经把2n的n=0-7的8个值先计算好作为常数存在数组OSMapTbl[7]中了,这正是前面的表3.1 OSMapTbl[]: OSMapTbl[0] = 20 = 0x01(0000 0001)OSMapTbl[1] = 21 = 0x02(0000 0010)……OSMapTbl[4] = 24 = 0x10(0001 0000)……OSMapTbl[7] = 27 = 0x80(1000 0000)(4)任务调度器调度是内核的主要职责之一,就是要决定该轮到哪个任务运行了。
在时间片轮转调度法中,当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间片,然后切换给另一个任务。
所以,也叫做时间片调度。
内核在满足以下条件时,把CPU控制权交给下一个处于就绪态的任务:●当前任务已无事可做●当前任务在时间片还没结束时已经完成了。
③链接器选项设置。
在Debug Settings 对话框中选择ARM Linker 列表项,将出现如图1-15所示的ARM Linker选项组对话框。
其中Output 选项卡用于控制链接器进行链接操作的类型。
选择Simple链接类型时,在Output 选项卡的Simple image 文本框中设置链接的Read-Only (只读)和Read-Write(读写)地址,如图2-5所示,链接器将依照所设定的地址映像方式,生成简单的ELF格式的映像文件。
地址0x30008000是开发板上SDRAM 的真实地址,是由系统的硬件决定的。
0x30200000 指的是系统可读写的内存地址。
也就是说,在0x30008000∼0x30200000 之间是只读区域,存放程序的代码段,从0x30200000 开始是程序的数据段,可读可写。
图1-15 设置链接地址范围以上只是一种简单设置,如果程序需要用到标准C 库函数时,可使用scatter 文件来设置链接地址;在标准C 中使用malloc 及其相关的函数,需要使用系统的堆(Heap)空间时,也可以通过scatter 文件来描述系统HEAP 段的位置。
这时,需要按图1-16进行链接地址的设置。
图1-16 通过scatter 文件设置链接地址如图1-16,在Output 选项卡中,选择LinkType 为Scattered,输入scatter文件名为scat_ram.scf;然后切换到Options 选项卡在Image Entry Point 框中输入0x30008000,把程序的入口定位在0x30008000。
(也可以在图1-16 的Command Line 框中直接输入-entry 0x30008000 -scatter scat_ram.scf 进行上述设置。
)针对2410-S 开发板,scat_ram.scf 文件内容如下:LOAD 0x30008000 ;load region{RAM_EXEC +0 ;PC{startup.o (init, +FIRST)* (+RO)}L0PAGETABLE 0x30200000 UNINIT ;about 2MByte offset SDRAM{pagetable.o (+ZI)}STACKS +0x100000 UNINIT ;64KByte under L0 pagetable{stack.o (+ZI)}RAM +0{* (+RW,+ZI)}HEAP +0 UNINITheap.o (+ZI)}EXCEPTION_EXEC 0 OVERLAY ;exception region{exception.o (+RO)}}该文件创建了一个RAM_LOAD程序区域,起始地址为0x30008000和6个数据区域(ROM_EXEC, RAM_EXEC, RAM, HEAP, STACKS, EXCEPTION_EXEC)。
嵌入式实时操作系统μCOSII原理及应用习题答案(第四版)嵌入式实时操作系统μCOSII原理及应用习题答案(第四版)嵌入式操作系统是一种特殊的操作系统,用于控制和管理嵌入式系统。
实时操作系统(RTOS)是一种在给定的时间约束下,能够及时响应外部事件的操作系统。
μC/OS-II是一种广泛应用于嵌入式系统的实时操作系统。
本文将介绍μC/OS-II的原理及应用,并提供第四版的习题答案。
一、μC/OS-II原理1. 任务(Task)管理:μC/OS-II采用优先级抢占式调度算法,支持多任务。
每个任务具有自己的任务控制块(TCB),用于记录任务的状态、优先级、堆栈等信息。
任务之间可以通过任务切换进行调度,具有不同的优先级来确保系统的实时性。
2. 信号量(Semaphore)机制:信号量用于任务之间的同步和互斥操作。
μC/OS-II提供了两种信号量机制:二值信号量和计数信号量。
二值信号量用于任务之间的互斥操作,而计数信号量用于任务之间的同步操作。
3. 事件标志组(Event Flag Group)机制:事件标志组用于任务之间的同步和通信操作。
一个事件标志组中可以包含多个事件标志位,每个标志位都可以独立设置或清除。
任务可以等待一个或多个事件标志位的发生,并在发生时得到通知。
4. 消息邮箱(Mailbox)机制:消息邮箱用于任务之间的通信。
每个消息邮箱中可以存放一个或多个消息,任务可以通过发送和接收消息来进行通信。
消息邮箱还支持阻塞和非阻塞两种方式。
5. 定时器(Timer)管理:μC/OS-II提供了软件定时器的功能,可以设置定时器来触发任务或其他操作。
定时器可以基于时间片、滴答定时器或硬件定时器实现。
二、μC/OS-II应用1. 实时任务调度:μC/OS-II可以在多个任务之间进行优先级调度,保证任务的及时执行。
通过设置任务的优先级和时间片,可以确保高优先级任务优先执行,从而满足实时性要求。
同时,μC/OS-II还提供了任务切换和上下文切换机制,确保任务之间的切换及时有效。
计算机应用Computer Application《自动化技术与应用》2003年第22卷第5期嵌入式实时操作系统μc/os-Ⅱ的移植探讨雷必成,吴高标,吴永良(台州学院计算机系 台州 317000)摘要:介绍一种嵌入实时操作系统———μc/os-Ⅱ的特点和基本组成。
以μc/os-Ⅱ在MCS-51上的移植为例,着重讨论μc/os-Ⅱ在移植过程中必须注意的几个问题。
并讨论其它处理器对同一问题的不同处理方式。
关键词:实时操作系统;嵌入式;移植;MCS-51中图分类号:TP31612 文献标识码:A 文章编号:100327241(2003)0520069203Transplanting of The Embedded Real T ime OperationSystem-μcΠo s-ⅡLEI Bi-cheng,WU G ao-biao,WU Yong-liang(Computer Department o f Taizhou Univer sity,Taizhou317000,China)Abstract:To introduce the characteristics and basic constitution o f the embedded Real Time Operation System-μcΠos-Ⅱ,it puts an emphasis on sever2 al problems on the transplanting process o fμcΠos-Ⅱ,taking“μcΠos-Ⅱtransplanting into MCS-51”for example.And it also involves different approaches to the same issue on other processor s.K ey words:RTOS;Embedded;Transplanting;MCS-511 引言在嵌入式应用系统的设计中,实时操作系统的应用越来越受到重视。
嵌入式实时操作系统μC/OS-Ⅱ的研究
近年来,随着计算机和通信技术的快速发展,嵌入式系统技术以其简洁、高效等优点成为了最热门的技术之一。
目前,航天航空、交通、工业控制、通信等各个领域已经广泛的应用了嵌入式系统技术。
在嵌入式系统中,嵌入式操作系统的实时性越来越来重要。
嵌入式实时操作系统μC/OS-Ⅱ具有小巧、性能稳定、开源、移植简单、硬实时性等优点而得到广泛的应用。
虽然μC/OS-Ⅱ有如此多的优点,但是实时性方面还存在不足之处。
本文深入分析了嵌入式实时操作系统μC/OS-Ⅱ的内核,重点研究了任务延时与软件定时器功能。
针对μC/OS-Ⅱ操作系统中任务延时的缺陷,参考C8051F系列单片机的片内PCAO (Programmable Counter Array 0),研究了一种基于硬件的、以提高系统的运行速度与实时性的延时机制。
经测试,得出此方法可以提高系统的实时性、减小系统的额外开销。
本文还对软件定时器中多个定时器同时完成定时的情况进行分析,根据存在的问题为定时器赋予不同的优先级,使用独立的任务执行回调函数,使定时器的回调函数按优先级先后顺序执行,以提高系统的实时性。
在以第二代Cortex-M3为内核的路虎LPC1786开发板上进行测试,通过比较原操作系统与改进后系统的运行情况,得出改进后的系统提高了系统的实时性。
嵌入式实时操作系统μCOS系统因为它具有软件代码小、高度、响应速度快等特点已经使它在许多领域得到广泛的应用。
从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等。
嵌入式系统通常由硬件环境和操作系统构成。
在嵌入式操作系统的统一调度管理下实现对全部系统资源的合理利用和分配,达到提高系统性能和有效利用有限资源的目的。
μCOS-Ⅱ作为一个源码开放的嵌入式实时操作系统,同时具有良好的可移植性、可裁剪性、可剥夺性、稳定性和牢靠性等优点,使其成为许多嵌入式操作系统的首选。
本文将μCOS-Ⅱ在的8位处理器芯片HC9S08上移植实现。
2、μCOS-Ⅱ系统结构μCOS-Ⅱ是一个完整的可移植可固化可裁剪的抢占式实时多任务内核。
可以在不需要做很大修改的基础上便利的移植到多种处理器上。
条件是:该处理器要具有一定数量的堆栈,能够用法软件中断,产生定时器中断,此外,编译器要支持可重入代码,并且要能用法汇编实现对处理器内部寄存器的相关操作。
通过μCOS-Ⅱ的管理,使多个任务之间互相协调,分时的占用CPU,实现充分利用资源和实时等相应的功能。
任务通常是一个死循环,用来完成某一特定的功能;一个任务相当于一个线程。
μCOS-Ⅱ可以管理多达64个任务,每个任务都具有一个唯一的合法优先级。
但是,优先级最低的那个任务已经被系统定义为空闲任务,用户不能用法。
用户可以通过函数OSTaskCreate()来创建任务,通过OSTaskDel()来删除任务。
任务可能有以下五种状态:睡眠态、就绪态、运行态、等待状态、中断服务态。
利用不同的系统函数可以实现任务在各状态之间的转换。
μCOS-Ⅱ通过对就绪表的操作总是挑选在就绪任务中优先级最高的那个任务开头运行。
任务级的调度是由函数OSSched()来完成的;而中断级的调度是由OSIntExt()完成的。
任务切换的过程分为两步:将被挂起任务的处理器寄存器状态保存在它的任务堆栈中;将将要执行的任务堆栈中保存的寄存器值弹处第1页共4页。