嵌入式实时操作系统RTOS uCOS-II 原理及应用

合集下载

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统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就是任务。

如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。

另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。

这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。

RTOSuCOS-II原理及应用-文档资料

RTOSuCOS-II原理及应用-文档资料

ISR_Sta ---- Running状态的任务被中断后进 入的状态。
2019/3/22
山东科技大学 信息学院
page
8
任务在没有被配备 任务控制块或被剥 夺了任务控制块时 的状态叫做任务的 睡眠状态
正在运行的任务,需要 等待一段时间或需要等 待一个事件发生再运行 时,该任务就会把CPU 的使用权让给别的任务 而使任务进入等待状态
2019/3/22 山东科技大学 信息学院
//退出临界区(开中断)
page
10
void MyTask1(void *pdata)

{ …… } 用户应用程序的一般结构 void MyTask2(void *pdata) { …… }

void main( ) “ 用户任务” 代码形式上很像 C函数,但他不是 { 函数! ……
page
4
第2章

目录
1、任务的基本概念 2、任务堆栈 3、任务控制块及任务控制块链表 4、任务就绪表及任务调度 5、任务的创建 6、任务的挂起和恢复 7、其他任务管理函数 8、uC/OS-II的初始化和任务的启动
2019/3/22 山东科技大学 信息学院
page
5
2.1 任务的基本概念
2019/3/22
山东科技大学 信息学院
page
6
2.1 任务的基本概念
2019/3/22
山东科技大学 信息学院
page
7
2.1

任务的基本概念
任务的 5 种状态: 各个任务在多任务系统中也随着环境条 “宏观” 上的多任务并发,实际上是 Sleep ---- 仅有编码未激活。 用单 件的情况而具有不同的状态。 CPU 进行多任务处理,“微观” 任 Ready ---- 已激活并“万事俱备,只欠调度” 何时刻,只能运行一个任务,存在CPU资 Running ---- 正占用 CPU 运行自己。 任务状态划分也是多任务操作系统的管 源竞争 ---- 任务调度、任务现场。 Wait ---- 等待某事件发生。 理手段。

《嵌入式操作系统UCOSII原理及应用》任哲—学习笔记

《嵌入式操作系统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. OSTaskCreate()用来创建任务的函数;OSStart()用来启动各项任务的函数,启动后,任务就交由操作系统来管理和调度了。

7. uC/OS-II预定义了两个为应用程序服务的系统任务:空闲任务:每个应用程都必须使用的,是CPU处于空闲时有事可做,也可在其中添加用户工作代码;统计任务:根据实际需要进行选择使用。

嵌入式实时操作系统uCOS-II(就绪算法)

嵌入式实时操作系统uCOS-II(就绪算法)

OSTCBTbl[1]
OSTCBStkPtr
OSTCBTbl[0]
OSTCBStkPtr
OSTCBNext
OSTCBTbl[2]
OSTCBStkPtr OSTCBNext
OSTCBTbl[n]
OSTCBStkPtr OSTCBNext NULL
OSTCBNext
NULL
20
任务控制块数组与指针
OSTCBFreeList
OSTCBPrioTbl[ ]
[0] [4] [5]
NULL
… &OSTCBTBL[1] &OSTCBTBL[2]

[OS_LOEEST_PRIO] &OSTCBTBL[0]
OS_TaskIdle
15
任务控制块数组与指针
OSTCBPrioTbl[
]
任务的优先级资源由操作系统提供,uc/OS-II 有64各优先级,优先级的高低按照编号从0(最高) 到63(最低)排序。由于用户实际使用的优先级的 个数通常少于64个,所以为节约系统资源,可以通 过定义系统常量OS_LOWEST_PRIO的值来限制优 先级编号的范围。
OSTCBTbl[2]
OSTCBStkPtr OSTCBNext
OSTCBTbl[n]
OSTCBStkPtr OSTCBNext NULL
NULL
13
任务控制块数组与指针
OSTCBPrioTbl[
]
任务控制块优先级表,专门用来存放指向各任 务控制块的指针,并按任务的优先级别将这些指针存 放在数组的各个元素里,这样系统在访问一个任务的 任务控制块时,就不必遍历任务控制块链表了。只要 知道任务的优先级,就可以迅速地从该数组中找到它 的任务控制块。

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第四部分D

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第四部分D

.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插入到空闲链表;或在任务建立的时候链接到双向使用链表中;或在任务删除的时候从链表中被删除。

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第四部分E

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第四部分E

根据给定的优先级通过设定就续表,使任务进入就绪态(参见程序清单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控制权交给下一个处于就绪态的任务:●当前任务已无事可做●当前任务在时间片还没结束时已经完成了。

RTOS uCOS-II 原理及应用 -- 7

RTOS uCOS-II 原理及应用 -- 7

2015-7-20
page
10
7.2 动态内存的管理
用户通过使用uC/OS-II提供的系统函数来使用、管理动 态内存:

OSMemCreate( ) --- 创建动态内存分区; OSMemGet( ) --- 从指定分区获得一个内存块;
OSMemPut( ) --- 将内存块归还指定分区;
2015-7-20
page
13
7.2 动态内存的管理

从指定分区获得一个内存块 --- OSMemGet( )
创建了内存分区之后,既可以使用OSMemGet( )函数从 指定分区获得一个内存块;该系统函数的原型:
void *OSMemGet( OS_MEM *pmem, INT8U *err );
//内存分区控制块指针 //出错信息
备注:函数正常返回一个 “内存块” 指针;否则,返 回一个 NULL 指针。在使用申请到的内存块时,切 勿越界。用完后要及时归还。
2015-7-20
page
14
7.2 动态内存的管理

从指定分区获得一个内存块 --- OSMemGet( ) 举例:
OS_MEM *CommTxBuf; INT8U CommTxPart[30][80]; INT8U err; INT8U *BlkPtr; void main (void) { ……; OSInit( ); ……; CommTxBuf = OSMemCreate( CommTxPart,30,80,&err); …… OSStart( ); }
uC/OS-II动态内存管理方式; 内存分区与内存控制块; 动态内存管理系统函数;
2015-7-20
page

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第一部分

嵌入式实时操作系统(μCOS-II)原理与应用-目录与正文-最新版第一部分

目录学习情境一、嵌入式系统概述及集成环境的搭建与使用 (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代码编辑器的使用.................... 错误!未定义书签。

学习情境二、嵌入式平台的接口驱动................................................................... 错误!未定义书签。

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