嵌入式实时操作系统RTOS uCOS-II 原理及应用
- 格式:ppt
- 大小:6.17 MB
- 文档页数:115
实时操作系统UCOS-II,学会RTOS给你的身价增值如果,你最近关注一些嵌入式招聘职位描述,你可能会经常看到看到使用过uCOS、Vxworks、QNX等RTOS者优先。
随便打开一个20K的嵌入式开发工作职责:你会发现熟悉RTOS的开发、移植、剪裁真的很吃香!今天,我们就来介绍一下实时操作系统UCOS-II。
一、嵌入式操作系统概览嵌入式操作系统的主要好处就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。
并且可以充分利用硬件资源,如在单任务时(大循环结构,如大部分51程序)遇到delay函数时,CPU在空转。
而在多任务系统,遇到delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了CPU,提高了效率。
uC/OS操作系统与裸机程序的最大不同点就在于uC/OS有任务调度,可以根据任务的重要程度(优先级)优先执行重要的任务,从而确保能及时处理最重要的数据。
(所以对于一个系统有必要使用OS的判断是能否划分一个个的任务,并且各任务间的耦合很小)可以思考下裸机程序中断的时候发生的过程。
利用堆栈可以很自由的在A、B中切换,如果切换足够快,A、B看以来好像同时在执行,这就是并行,A、B就是任务。
如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。
另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。
这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。
第一章嵌入式实时操作系统的概念1. 计算机操作系统:对计算机系统资源进行管理,并向计算机用户提供若干服务。
OR:计算机操作系统是计算机硬件的一个软件包装,它为应用程序设计人员提供了一个更便于使用的虚拟计算机。
2. 操作系统功能:1)处理器的管理:(1) 中断管理;(2)对处理器工作进行调度;2)存储的管理:3)设备的管理:4)文件的管理:5)网络和通信的管理:6)提供用户接口:3. 嵌入式系统:对对象进行自动化控制而使其具有智能化并可嵌入对象体系中的专用计算机系统。
4. 嵌入式操作系统:运行在嵌入式硬件平台上,对整个系统及其所操作的部件、装置等资源进行统一协调、指挥和控制的系统软件。
5. 实时操作系统:(1)多任务系统;(2)任务切换时间与系统中的任务数无关;(3)中断延时的时间可预知并尽可能短。
第二章uC/OS-II中的任务1. uC/OS-II操作系统内核的主要工作就是对任务进行管理和调度。
2. UC/OS-II的任务组成部分:(1)任务程序代码:任务的执行部分;(2)任务堆栈:保存任务工作环境;(3)任务控制块:保存任务属性。
3. uC/OS-II的两种任务:用户任务:由应用程序设计者编写的任务。
系统任务:系统提供的任务。
4. 任务的状态:(1)睡眠状态:是否配置或剥夺任务控制块的配置情况;(2)就绪状态:任务就绪表进行就绪登记,等待优先级,具备运行充分条件;(3)运行状态:获得CPU使用权限,任何时候只有一个任务处于运行状态。
(4)等待状态:正在运行的任务,需要等待一段时间或一件事件发生在运行,暂时交出CPU使用权。
5. 用户任务代码结构:任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构叫做超循环结构。
6. OSTaskCreate()用来创建任务的函数;OSStart()用来启动各项任务的函数,启动后,任务就交由操作系统来管理和调度了。
7. uC/OS-II预定义了两个为应用程序服务的系统任务:空闲任务:每个应用程都必须使用的,是CPU处于空闲时有事可做,也可在其中添加用户工作代码;统计任务:根据实际需要进行选择使用。
.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控制权交给下一个处于就绪态的任务:●当前任务已无事可做●当前任务在时间片还没结束时已经完成了。
目录学习情境一、嵌入式系统概述及集成环境的搭建与使用 (1)一、知识要点:嵌入式系统概述 (1)1.嵌入式系统基本概念 (1)2.嵌入式系统的特点 (2)3.嵌入式系统的应用领域 (3)(1)工业控制领域 (3)(2)信息家电 (4)(3)交通管理、环境监测、医疗仪器 (4)(4)嵌入式Internet应用 (4)(5)军事国防领域 (5)4.嵌入式系统的发展 (6)5.嵌入式系统的开发流程 (7)6.嵌入式系统的调试 (10)(1)在线仿真器(ICE)方式 (10)(2)在线调试器(ICD)方式 (11)(3)监控器方式 (11)7.基于μCOS-Ⅱ的嵌入式系统软件体系结构 (11)二、技能要求:嵌入式系统交叉开发环境的搭建 (2)1.交叉开发环境 (2)2.使用集成开发环境进行软件开发的流程 (2)3.ARM ADS集成开发工具及其组成 (3)(1)ADS集成开发工具 (3)(2)ADS集成开发工具的组成 (3)案例1.ADS 1.2的安装 (4)案例2.ADS集成开发环境的使用 (5)(1)新建工程 (5)(2)配置新建工程 (6)(3)添加文件,完成编译与链接,并生成目标文件.......... 错误!未定义书签。
案例3.其它工具的使用 .............................................................................. 错误!未定义书签。
(1)仿真器的连接与使用................................ 错误!未定义书签。
(2)超级终端的设置及映像下载.......................... 错误!未定义书签。
(3)Source Insight代码编辑器的使用.................... 错误!未定义书签。
学习情境二、嵌入式平台的接口驱动................................................................... 错误!未定义书签。
③链接器选项设置。
在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)。
《嵌入式操作系统UCOSII原理及应用》任哲—学习笔记第一章嵌入式实时操作系统的概念1.计算机操作系统:对计算机系统资源进行管理,并向计算机用户提供若干服务。
OR:计算机操作系统是计算机硬件的一个软件包装,它为应用程序设计人员提供了一个更便于使用的虚拟计算机。
2.操作系统功能:1)处理器的管理:(1)中断管理;(2)对处理器工作进行调度;2)存储的管理:3)设备的管理:4)文件的管理:5)网络和通信的管理:6)提供用户接口:3.嵌入式系统:对对象进行自动化控制而使其具有智能化并可嵌入对象体系中的专用计算机系统。
4.嵌入式操作系统:运行在嵌入式硬件平台上,对整个系统及其所操作的部件、装置等资源进行统一协调、指挥和控制的系统软件。
5.实时操作系统:(1)多任务系统;(2)任务切换时间与系统中的任务数无关;(3)中断延时的时间可预知并尽可能短。
第二章uC/OS-II中的任务1.uC/OS-II操作系统内核的主要工作就是对任务进行管理和调度。
2.UC/OS-II的任务组成部分:(1)任务程序代码:任务的执行部分;(2)任务堆栈:保存任务工作环境;(3)任务控制块:保存任务属性。
3.uC/OS-II的两种任务:用户任务:由应用程序设计者编写的任务。
系统任务:系统提供的任务。
4.任务的状态:(1)睡眠状态:是否配置或剥夺任务控制块的配置情况;(2)就绪状态:任务就绪表进行就绪登记,等待优先级,具备运行充分条件;(3)运行状态:获得CPU使用权限,任何时候只有一个任务处于运行状态。
(4)等待状态:正在运行的任务,需要等待一段时间或一件事件发生在运行,暂时交出CPU使用权。
5.用户任务代码结构:任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构叫做超循环结构。
6.OSTakCreate()用来创建任务的函数;OSStart()用来启动各项任务的函数,启动后,任务就交由操作系统来管理和调度了。