ucosii任务设计(ppt)

合集下载

第九讲 uCOSII嵌入式实时操作系统PPT课件

第九讲 uCOSII嵌入式实时操作系统PPT课件

章连载在美国1992年《嵌入式系统编程》杂志
的5月和6月刊上。uC/OS的源码发布在该杂志
的BBS上。1993年,美国的R&D出版社出版了
《uC/OS the Real Time Kernel》,在后来几年
中该书的销量超过了15000册。
3
9.19.2.1 uuCC/O/OSS-III的简介译者
2)uC/OS-II的译者
13
9.29u.2C./3OS硬-II件的系相统关函数
3)与硬件有关的部分 • OS_CPU.H
数据类型定义部分不需要修改, #typedef unsigned char BOOLEAN #typedef float FP32 #define BYTE INT8S #define UBYTE INT8U .......
4)uC/OS-II的特点 • 体积小、实时性强、易学易用。 • 源代码开放:购书即可获得,注释详细。 • 可移植性:大部分用ANSI C编写,以移
植到多种微处理器上。 • 可固化:通过一定的工具,可将其嵌入
到用户的产品中。 • 可裁剪:使用条件编译实现裁剪。
7
9.91..14 uCC//OOSS-I-II简I特介点
4
99.1.1.u3C应/O用S-I范I 简围介
3)uC/OS-II的应用范围 • 世界上数以千计的工程技术人员将
uC/OS 应用到了各个领域,如照像机 业、医疗仪器、音响设备、发动机控制、 网络接人设备、高速公路电话系统、 AT M机和工业机器人等。 • 许多大学用uC/OS作教材,用于实时系 统教学。
与硬件相关的部分如下: #include <os_cpu.h> #include <os_cfg.h> #include <ucos-ii.h> #include <pc.h>

精品课件-uCOOS-II原理与ARM应用程序-第3章

精品课件-uCOOS-II原理与ARM应用程序-第3章

3
**@2009-4-4
4
**Main Routine
5 **Copyright Reserved
6 */
第三章 将µC/OS-Ⅱ移植到UP-Star实验板上
7
8 #include “includes.h”
9
10 void main(void)
11 {
12
OSInit();
13
14
OSStart();
下面首先介绍一个基于UP-Star实验板的µC/OS-Ⅱ实例, 即LED闪烁实例;然后再介绍µC/OS-Ⅱ移植需要做的工作。
第三章 将µC/OS-Ⅱ移植到UP-Star实验板上
3.1 μC/OS-Ⅱ LED实例
在第2.3节工程ex2_3的基础上新建工程ex3_1,存储目录 为D:\ZYUCOSII\ex3_1(此时的工程ex3_1与工程ex2_3完全相同, 仅是工程名改为ex3_1),如图3-1所示。
(13) ucos_ii.c第28行,由“#include <os_sem.c>” 改为“#include "os_sem.c"”;
第三章 将µC/OS-Ⅱ移植到UP-Star实验板上
(14) ucos_ii.c第28行,由“#include <os_task.c>” 改为“#include "os_task.c"”;
3.1.1 实例ex3_1 为了清晰地说明实例ex3_1的创建过程,下面逐步介
绍。 S1. 在图3-1的工作区中,移除 “user”分组下的所有文
件,删除“asm”分组,添加“ports”分组和“ucosii”分组, 如图3-2所示。
第三章 将µC/OS-Ⅱ移植到UP-Star实验板上

uCOS-II ppt 入门基础

uCOS-II  ppt 入门基础

硬件初始化
• 系统启动处理(在调用uC/OS-II操作系统初始化函数 OSInit()前,需要对CPU进行必要的初始化,例如设置异 常处理栈空间。要使uC/OS-II能够正常运行,时钟任务是 必不可少的。另外,启动代码需要存储在哪个内存空间, 在运行时需要在哪个内存中运行,这些都需要程序员手动 设置。)
典型的main函数
• • • • • • • • • • • • • • void main (void) { /*-----硬件初始化,等用户代码初始化-----*/ ... OSInit(); /* 初始化uC/OS-II */ …/*-------安装中断向量---------*/ /*通过调用OSTaskCreate ( ) 或OSTaskCreateExt ( )创建至少一个任务;*/ OSTaskCreate(TaskStart , (void*)0, &TaskStartStk[TASK_STK_SIZE - 1], 2 ); … /*通过调用OSSemCreate() 创建信号量等任务通信方式;*/ CalcSem = OSSemCreate(0); … OSStart(); /* 开始多任务调度!OSStart()永远不会返回 */ }
时钟
PC机上移植和运行uC/OS-II要注意其与PC机中其他操 作系统的关系(主要是与DOS操作系统之间的关系),不 能因为安装了uC/OS-II而使其他操作系统不能正常使用。 • 在PC机中,DOS系统时间的周期为 54.93ms(18.20648HZ)。 • DOS操作系统的系统时钟是由PC机上配置的硬件定时 DOS PC 器产生的。在硬件定时器的每个定时周期结束时,硬件定 时器便向CPU申请一次中断,在中断服务程序中处理DOS 所需要的系统时钟,同时处理DOS系统有关时间的一些管 理事务。在80X86系统的中断向量表中,产生DOS系统时 钟硬件定时器所占用的中断向量为0x08. • 在这我们把uC/OS-II的系统时钟频率设置为200HZ,这 显然比DOS的时钟频率高得多。因此,借用产生的DOS系 统时钟的定时器信号来产生uC/OS-II系统时钟。200除于11 等于18.18约等于18.2.后把uC/OS-II的时钟中断向量安装到 0x08上,而把0x08中原来的DOS的时钟中断向量转存到中 •

uCOSii任务设计

uCOSii任务设计

第四章任务设计在基于实时操作系统的应用程序设计中,任务设计是整个应用程序的基础,其他软件设计工作都是围绕任务设计来展开,任务设计就是设计“任务函数”和相关的数据结构。

4.1 任务函数的结构在用户任务函数中,必须包含至少一次对操作系统服务函数的调用,否则比其优先级低的任务将无法得到运行机会,这是用户任务函数与普通函数的明显区别。

任务函数的结构按任务的执行方式可以分为三类:单次执行类、周期执行类和事件触发类,下面分别介绍其结构特点。

4.1.1 单次执行的任务此类任务在创建后只执行一次,执行结束后即自行删除,其任务函数的结构如下:程序清单L4-1 单次执行任务函数的结构void MyTask (void *pdata) //单次执行的任务函数{进行准备工作的代码;任务实体代码;调用任务删除函数; //调用OSTaskDel(OS_PRIO_SELF)}单次执行的任务函数由三部分组成:第一部分是“进行准备工作的代码”,完成各项准备工作,如定义和初始化变量、初始化某些设备等等,这部分代码的多少根据实际需要来决定,也可能完全空缺。

第二部分是“任务实体代码”,这部分代码完成该任务的具体功能,其中通常包含对若干系统函数的调用,除若干临界段代码(中断被关闭)外,任务的其它代码均可以被中断,以保证高优先级的就绪任务能够及时运行。

第三部分是“调用任务删除函数”,该任务将自己删除,操作系统将不再管理它。

单次执行的任务采用“创建任务函数”来启动,当该任务被另外一个任务(或主函数)创建时,就进入就绪状态,等到比它优先级高的任务都被挂起来时便获得运行权,进入运行状态,任务完成后再自行删除,“启动任务”就是一个例子。

采用“启动任务”后,主函数就可以简化为三行,只负责与操作系统有关的事情,即初始化操作系统、创建“启动任务”、启动操作系统,使主函数的内容固定下来,与具体的应用系统无关。

真正启动系统所需要的准备工作由“启动任务”来完成,它的内容与具体的系- 1 -- 2 -统密切相关。

uCOSII微小内核分析PPT课件

uCOSII微小内核分析PPT课件

task:指向任务代码的指针(函数指针) pdata:传递给任务的参数(一个变量指针)
ptos :指向任务堆栈栈顶的指针
prio :任务的优先级
任务堆栈必须声明为OS_STK类型。注意:在中断处理程序中不能建立任务。在任务中必须调用 μC/OS提供的下述过程之一:延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队 列),以便其它任务也能获得CPU的使用权
ticks:要延时的时钟节拍数
延时时间0表示不进行延时操作,而立即返回调用者。为了确保设定的延时时间, 建议用户设定的时钟节拍数加1。例如,希望延时10个时钟节拍,可设定参数为11
1.1 概述
• 函数说明
μC/OS-II 微小内核SOURCE4提供OSTimeTick函数。
函数名称 函数原型 功能描述
必须先建立信号量,然后使用,不允许在中断中调用该函数, 因为中断不能被挂起
1.1 概述
• 函数说明
μC/OS-II 微小内核SOURCE4提供OSSemPost函数。
函数名称 函数原型 功能描述 函数参数
函数返回值
特殊说明
OSSemPost
所属文件பைடு நூலகம்
OS_SEM.C
INT8U OSSemPost (OS_EVENT *pevent)
特殊说明
OSTimeTick
所属文件 OS_CORE.C
void OSTimeTick(void)
在每次时钟节拍中断服务程序中被调用,无函数参数和返回值。OSTimeTick()检 查处于延时状态的任务是否达到延时时间,或正在等待事件的任务是否超时
OSTimeTick()的运行时间和系统中的任务数直接相关,在任务或中断中都可以调 用。如果在任务中调用,任务的优先级应该很高(优先级数字很小),这是因为 OSTimeTick()负责所有任务的延时操作

ucOS-II入门经典教程---第1章(共3章)PPT课件

ucOS-II入门经典教程---第1章(共3章)PPT课件

予任 境处务的存控理储制器位块的置提堆。供了栈运指行针环SP } OS另指控I…_TN外针制…CTB8再(块;U S用,P一它)个除,数了这据保个OS结存数TC构任据BP保务结ri存堆构o;任栈叫务指做//堆针任任栈之务务的优任作一先任务系个级务控统数别堆制另据栈块行结是构构由造,操的每
外还要负责保存任务其他信息。
化。 4.具有很强的实用性。 5.学习数据结构应用的好例子。
2021
讲座的主要内容
一.计算机操作系统的基本概念 二.操作系统中常用的数据结构 三.并发操作系统的概念 四.任务的要素 五. μC/OS-II的任务管理(任务调度) 六. μC/OS-II的中断和时钟 七. μC/OS-II的任务的同步与通信 八. μC/OS-II的存储管理 九.硬件抽象层和测试台
务联对的应一的些程数序据配实套结的体堆构栈就而叫构做成“的任务”
(一实个质实上体是。一个线程),任务μ堆C栈/OS-
II就是一个能对这些小任务的运
行进行管理和调度的多任务操作
系统。
2021
任务切获 的得 任换待 务运 控过行 制任 块程务
处理器的SP=任 务块中保存的SP
如何获得待运行 任务的任务控制
3。其中的所有元素名 a+2 a[2]
3。缺点:占用
称都相同,但每个元 a+3 a[3] 素都有一个编号;
连续空间大
… …
4。元素名去掉编号
(下标),得到的是 a+9 a[9]
数组名,数组名是个
指针。 应用:记录同类事物的表
2021
操作系统中经常使用 的数据结构(位图)
位图是数组的一种 特殊应用
a[10] (可以记录80个事物的状态)

《uCOSII原理》PPT课件

《uCOSII原理》PPT课件
系例统如中,的两多个个任任务在:运任行务时A和,任经务常需B,要它互们相
第4任章务的同步与通信 例如则该无相的此调总顺招需成数显如果任处冲 支 的限,之序呼要一据然突持能制操,系务于,要通项,,。地和力和作B任统等多求因过工任当访依制系,务已待个时不访作务任问赖约统从A经状任,能B和问,务同必而,,负把态务在获A任同任一须使甚 才责还打,共正个具得任务保至一务从未印只享式共有务证有打AB个缓向负共机有享对同工之时任印数冲缓责享分当资任间还务一作机据区冲向一配任源务可的要资之的缓读区缓台给务的以顺互,源前使冲取写冲打A了运相无利或或要用把区行加运冲者该入区印任有互权打合进行以突需数数写机务工相而印作行必要。、据据入,A作打应,机完协要互因流。
务的同步的。
任务间的同步依赖于任务间的通信。
在μC/OS-II中,是使用信号量、邮
箱(消息邮箱)和消息队列这些被
事 称作事件的中间环节来实现任务之
间的通信的。

黄宏
宋丹丹
一个简单的信号量
发信方
1/0
收信方
共享资源
如 它 数 (如 却 却把a的解果进又仍果i为μ作除t一一入要因一(用等个就使了C为个个/就待)正绪它没正把O函任是状在状S进有在-描把数态务等态入获等I调)待。I述就。置取待使用后的这绪事事事该于这,任用时状件件件函个再等务态要等的叫函把具的,数调待原任做数任备这用因务数的状的务事了时O而已据S原任在态可要_件未经E务任结型以调要v具超控e在务运用n构备为过调t任就制O行T可了S统a:务绪用_的s块以等Ek等表一vR条O运待eEd待中Sny件C起行_的t(表对BTE,的时O的来)中应v(函那e条间的的数,)n数么件,函位位t。就T,置置a该要s清1使,函k0W
空事件控制块链表 链接指针,把这些空事件控制块链接成一个单向

ucosii实时操作系统分析-任务管理及调度精品PPT课件

ucosii实时操作系统分析-任务管理及调度精品PPT课件
(48页例2-8) 10、用信号量实现任务间同步和互斥示例程序演示--0.9(可选)
(119页例4-4,122页例4-5) 11、用消息邮箱实现任务间通信示例程序演示--0.9(可选)(136页例4-8) 3
实时操作系统C/OБайду номын сангаас-II
1 C/OS-II概述 2 任务概念 3 任务调度核心问题分析
4
C/OS简介
美国人Jean Labrosse 1992年完成 应用面覆盖了诸多领域,如照相机、医疗器械、音
响设备、发动机控制、高速公路电话系统、自动提 款机等 1998年C/OS-II,目前的版本C/OS -II V2.61 ,2.72 2000年,得到美国航空管理局(FAA)的认证, 可以用于飞行器中 网站()
( 31页2.4.2) 5、任务调度器实现流程图表述--1 (43页2.4.3) 6、任务调度器实现及源代码分析--1 (43页2.4.3 ) 7、任务切换的过程描述--0.8(可选) (43页2.4.3 ) 8、用户任务的实现(编写一个示例程序验证调度算法)--1 (43页例2-7) 9、任务状态切换(挂起和恢复任务)示例程序演示--0.9(可选)
任务控制块是一个数据结构,保存该任务的相关参数,包括任务 堆栈指针,任务的当前状态,任务的优先级等。
任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得 到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地 继续执行。
OS_TCB全部驻留在RAM中。
任务控制块就相当于一个任务的身份证,没 有任务控制块的任务是不能被系统承认和管 理的。
µC/OS-II操作系统中进程调 度模块分析
1
1、课程任务:
背景
分析µC/OS-II操作系统中的进程调度模块的源代码

第二章uCOSII中任务

第二章uCOSII中任务

2)任务状态
• 运行态(RUNNING): 正在使用CPU的状态称运行 态。就绪的任务只有当所有优先级高于自己的 任务转为等待状态,或者是被删除了,才能进 入运行态。
• 等待态(WAITING):等待某事件发生的状态.
–正在运行的任务可以通过调用OSTimeDly()或 OSTimeDlyHMSM()进入等待状态
void mytask(void *pdata) {
for (;;) { do something; waiting; do something; } }
从任务的存 储结构看, 任务由三个 部分组成:
1)任务概述
任务控制块
指向前一个任务控制块的指针 指向后一个任务控制块的指针 指向任务的指针 指向任务堆栈的指针 任务的优先级别 ……
–调用OSSemPend() 、 OSMboxPend() 或 OSQPend() 进 入等待状态(WAITING)。。
2)任务状态
• 中断服务态(ISR):
–正在运行的任务被中断(除非中断是关闭的)时就 进入了中断服务态(ISR)。
2)任务状态
3)系统任务
• 空闲任务(Idle Task)
–μC/OS-Ⅱ总要建立一个空闲任务,这个任务在没 有其它任务进入就绪态时投入运行。这个空闲任 务OSTaskIdle()永远设为最低优先级,即 OS_LOWEST_PRI0。
1)堆栈创建
– 堆栈是在存储器中按数据“后进先出(LIFO)的 原则组织的连续存储空间。为满足任务切换和响 应中断时保存CPU寄存器中的内容及任务私有数 据的需要,每个任务都应该配有自己的堆栈。
– uC/OS-II中堆栈的数据类型为为OS_STK (typedef unsigned int OS_STK )。

第8讲(嵌入式实时操作系统ucosII程序设计①)

第8讲(嵌入式实时操作系统ucosII程序设计①)

嵌入式ARM-linux
体育工程信息技术系
嵌入式ARM-linux
体育工程信息技术系
嵌入式ARM-linux
体育工程信息技术系
嵌入式ARM-linux
体育工程信息技术系
嵌入式ARM-linux
体育工程信息技术系
技术系
嵌入式ARM-linux
体育工程信息技术系
体育工程信息技术系
嵌入式ARM-linux
uC/OS-Ⅱ要求用户提供一个称为时钟节拍的定 时中断,该中断每秒发生10至100次,时钟节拍的实 际频率是由用户控制的。任务申请延时或超时控制 的计 时基准就是该时钟节拍。该时钟节拍同时还是 任务调度的时间基准。uC/OS-Ⅱ提供了与时钟节拍 相关的系统服务,允许任务延时一定数量的时钟节 拍或按时、 分、秒、毫秒进行延时。
体育工程信息技术系
嵌入式ARM-linux
uC/OS-Ⅱ最多可以管理64个任务,这些任务通 常都是一个无限循环的函数。在目前的版本中,作 者保留了优先级为0、1、2、3、 OS_LOWEST_PRIO-3 、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO的任务,所以用 户可以同时拥有56 个任务。uC/OS-Ⅱ提供了任务管理的各种函数调用 ,包括创建任务、删除任务、改变任务的优先级、 挂起和恢复任务等。系统初始化时会 自动产生两个 任务:一是空闲任务OSTaskIdle(),它的优先级最 低为OS_LOWEST_PRIO,该任务只是不停地给一个32 位的整型变量加 一;另一个是统计任务 OSTaskStat(),它的优先级为OS_LOWEST_PRIO-1, 该任务每秒运行一次,负责计算当前CPU的利用率。
嵌入式ARM-linux

uCOS_II_任务设计

uCOS_II_任务设计

(1) 单次执行类
此类任务在创建后只执行一次,执行结束后即自行删除, 此类任务在创建后只执行一次,执行结束后即自行删除,这种任 务结构多见于初始化任务函数. 务结构多见于初始化任务函数.如:
Hazardous Environment Solution Solutions
Void Task_Init( viod*pdata ) {
当任务执行周期远大于系统时种节拍时如isensor中系统时钟以25ms为一个时钟节拍则ostimedly就延时25ms如延时1s时则ostimedly40任务的执行周期的相对误差比较小当任务执行周期只有几个时钟节拍时则相邻两次执行的间隔时间抖动就有些明显任务执行周期的相对误差比较大因此适应于对周期稳定性要求不高的任务如键盘任务当任务执行周期只有一个时钟节拍时可以将该任务的功能放到ostimetickhook函数
Hazardous Environment Solution Solutions
任务级的调度是由OS_Sched()实现的 中断级的调度是由 实现的,中断级的调度是由 任务级的调度是由 实现的 OS_IntExit ( )完成的,通过以下具体实现代码可以看出他们的原 完成的, 完成的 理相似之处. 理相似之处. OSCtxSw push sr PUSHALL mov.w &OSTCBCur, R13 mov.w SP, 0(R13) call #OSTaskSwHook mov.b &OSPrioHighRdy, R13 mov.b R13, &OSPrioCur mov.w &OSTCBHighRdy, R13 mov.w R13, &OSTCBCur mov.w @R13, SP POPALL reti
Hazardous Environment Solution Solutions

第2章uCOSII中的任务-

第2章uCOSII中的任务-
void mytask(void *pdata) {
for (;;) { do something; waiting; do something; } }
3
从任务的存 储结构看, 任务由三个 部分组成:
1)任务概述
任务控制块
指向前一个任务控制块的指针 指向后一个任务控制块的指针 指向任务的指针 指向任务堆栈的指针 任务的优先级别 ……
19
2 任务堆栈--增长方向
对两个方向增长的堆栈都提供支持的代码
OS_STK TaskStack[TASK_STACK_SIZE];
#if OS_STK_GROWTH == 0 OSTaskCreate(task, pdata, &TaskStack[0], prio);
#else
OSTaskCreate(task, pdata, &TaskStack[TASK_STACK_SIZE-1], prio);
LDMFD sp!, {r4}
MSR CPSR_cxsf, r4
LDMFDsp!, {r0-r12, lr, pc }
; get new state from top of the stack ; CPSR should be SVC32Mode ; start the new task
15
2 任务堆栈--创建
1)堆栈创建
➢堆栈是在存储器中按数据“后进先出(LIFO)的 原则组织的连续存储空间。为满足任务切换和响应 中断时保存CPU寄存器中的内容及任务私有数据的 需要,每个任务都应该配有自己的堆栈。
➢uC/OS-II中堆栈的数据类型为为OS_STK( typedef unsigned int OS_STK )。
➢当 堆 栈 向 上 增 长 时 , 将 OS_STK_GROWTH 置 为 0 , 需 将 堆 栈 的 最低内存地址传递给任务创建函数。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档