ucosii实时操作系统分析-任务管理及调度精讲
第九讲 uCOS-II嵌入式实时操作系统
第九讲 第九讲 系统函数 uC/OS-II 嵌入式实时操作系统
1、uC/OS-II简介 2、系统函数 3、任务组成 4、任务管理 5、时钟和中断 6、内存管理 7、移植方法 8、移植实例
9.2 9.2.1 总体组成 uC/OS-II的系统函数
1)uC/OS-II的组成: 与处理器无关的代码; 与
9.1 uC/OS-II 简介 9.1.3 应用范围
3)uC/OS-II的应用范围 • uC/OS已经移植到了很多CPU上,例如:
AnalogDevices的AD21xx; ARM的ARM7/ ARM9等; Hitachi的64180、H8/3xx和SH系列; Intel的80x86、Pentium、PentiumII、 8051、8052、MCS-251、80196等; Motorola的PowerPC、68K、CPU32、 ColdFire、M.Core、68HC系列; Siemens的80C166和TriCore; TexasInstruments的TMS320等;
9.3 9.3.1 任务组成 uC/OS-II的任务组成
1) 任务组成
9.3 9.3.2 任务状态 uC/OS-II的任务组成
2) 任务的状态:睡眠、就绪、运行、等 待和中断服务5种状态。
9.3 uC/OS-II的任务组成 9.3.3 任务优先级
3)任务的优先级 uC/OS-II 按硬件实时任务的可剥夺型 内核来设计的,因此每个任务必须要有一 个唯一的优先级,用于表明该任务在抢夺 微处理器时所具有的优先权。 uC/OS-II规定应用程序最多包含64个 任务,即最多64个优先级。
9.2 9.2.1 应用相关 uC/OS-II的系统函数
2)应用程序有关的部分 • OS_CFG.H: 配置文件
μC/OS-Ⅱ的多任务系统实时性分析与优先级分配
1
j ^L盖 入 j 毒 刍厢 —毒 :
… … … … r A 些喜田、
维普资讯
专 题 论 述
动 条 和状 态 标 志 块 , L D界 面 上 获 得 明确 的 操 作 指 示 , 在 C ② Fah除 了用 作 程 序 存 储 器 外 , 下 的部 分 作 为 非 ls 剩 易 失性 数 据 存储 器 。每个 Fl h块 为 1K 故 需要 1KB的 a s B,
显 示 状 态 标志 l
I会 大 大 加 重 系 统 负 担 , 应 用 程 序 的 运 行 受 到 影 响 , I 使 特 别 在 快 速 A/ 转 换 等 实 时 性 较 强 的场 合 , 法 得 到 及 时 D 无
的响 应 , 是才 有 了更 轻 量 级 的 S l RTOS等 操 作 系统 于 mal
的 出现 。
显 示 状 态 标志2
但 目前更 强 劲 的 5 1内 核 版 本 微 处 理 器 的 大 量 出 现 , 从 根 本 上 改 变 了 这种 情 况 。4 O MHz以 上 的主 频 , 周 期 单 指 令 的微 处 理器 , 上 6 加 4KB的程 序 空 间 和 8KB 以 上 的
确 保 每个 通 道 的正 确 操作 。 要求 在 通 道启 动 后 , 精 确 地 每 隔 0 1S 成 一 次 采 能 . 完
样 并处 理 数据 , 以每个 通 道 的最 长处 理 时 间 不 能 超 过 2 所 5
R AM 作 为 Fah的读写 缓 冲 区 ; 1 s
③ GUI自身 约 占去 了 1KB内存 ;
维普资讯
//  ̄ OS—I的多任务 系统 C l 实 时性分 析与优先 级分 配 *
■ 武汉 工 程 大 学 冉 全 钟 时 明 钱 环 环
_C_OS_II的实时性任务调度分析
操作系统的实时性主要体现在: 当优先级高的任 务要求工作时, 操作系统要以尽快的时间将此任务调 度到 CPU 执行。这里所花费的时间主要包括两部分: 查找最高优先级任务和任务切换[ 1 ]。 其中, 任务切换 ( 即 CPU 寄存器内容切换) 时间是和处理器相关的, 因此本文只分析 Λ C O S 2II 的任务调度算法是如何查 找最高优先级任务的。
3 2009208209 收到, 2009209230 改回 3 3 郑恭明, 男, 1980 年生, 讲师, 研究方向: 信号处理、 嵌入式及 EDA 技术与应用的教学和研究。
图 1 Λ C O S 2II 的任务就绪表
当 O SR dyT b l [ 0 ] 中 的 任 何 一 位 是 1 时, O SR dyG rp 的第 0 位置 1; 当 O SR dyT b l[ 1 ] 中的任何 一位是 1 时, O SR dyG rp 的第 1 位置 1; 当 O SR dyT b l [2 ] 中的任何一位是 1 时, O SR dyG rp 的第 2 位置 1; 当 O SR dyT b l[ 3 ] 中的任何一位是 1 时, O SR dyG rp 的
・6・ ( 总 854)
文章编号: 100325850 ( 2009) 1120006202
Λ C O S 2II 的实时性任务调度分析
2009 年
Ana lys is of Rea l- T i m e Ta sk Schedul ing of Λ C O S- II
郑恭明
( 长江大学电子信息学院 湖北荆州 434023)
I N T 8U con stO SU nM ap T b l[ 256 ]= { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x00to 0x0F 3 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x10to 0x1F 3 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x20to 0x2F 3 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x30to 0x3F 3 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x40to 0x4F 3 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x50to 0x5F 3 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3 0x60to 0x6F 3
uCOS-II的任务切换机理及中断调度优化
摘要:μC/OS-II是一种适用于嵌入式系统的抢占式实时多任务操作系统,开放源代码,便于学习和使用。
介绍μC/OS-II在任务级和中断级的任务切换原理,以及这一操作系统基于嵌入式系统的对于中断的处理;相对于内存资源较少的单片机,着重讨论一种优化的实用堆栈格式和切换形式,以提高资源的利用率;结合MSP430单片机,做具体的分析。
关键词:实时多任务操作系统μC/OS MSP430 中断堆栈引言在嵌入式操作系统领域,由Jean J. Labrosse开发的μC/OS,由于开放源代码和强大而稳定的功能,曾经一度在嵌入式系统领域引起强烈反响。
而其本人也早已成为了嵌入式系统会议(美国)的顾问委员会的成员。
不管是对于初学者,还是有经验的工程师,μC/OS开放源代码的方式使其不但知其然,还知其所以然。
通过对于系统内部结构的深入了解,能更加方便地进行开发和调试;并且在这种条件下,完全可以按照设计要求进行合理的裁减、扩充、配置和移植。
通常,购买RTOS往往需要一大笔资金,使得一般的学习者望而却步;而μC/OS对于学校研究完全免费,只有在应用于盈利项目时才需要支付少量的版权费,特别适合一般使用者的学习、研究和开发。
自1992 第1版问世以来,已有成千上万的开发者把它成功地应用于各种系统,安全性和稳定性已经得到认证,现已经通过美国FAA认证。
1 μC/OS-II的几大组成部分μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。
能够维持系统基本工作的部分都在这里。
任务处理部分(OSTask.c)任务处理部分中的内容都是与任务的操作密切相关的。
包括任务的建立、删除、挂起、恢复等等。
因为μC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。
基于μCOS-II操作系统的任务调度机制
基于μC/OS-II操作系统的任务调度机制论文关键词:μC/OS-II;多任务;任务调度论文摘要:μC/OS-II操作系统之所以在10多年的时间里作为一个嵌入式实时的多任务操作系统得到了广泛的应用,原因之一是它的任务管理机制存在许多的优点。
多任务运行的最大难点就在于多任务的调度。
WANG Yu-rong,ZHU Jian-bin(Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten years.One of the reason is that the Operating Systems has many advantages.The hardest point is the schedul of tasks when we run multi-task Operating Systems.Key words:μC/OS-II;Multi-task;task-scheduling1 引言嵌入式系统是一种应用范围非常广泛的系统。
可以这样理解,除了桌面计算机和服务器外所有计算设备都属于嵌入式系统。
在短短十多年的时间里,伴随着微电子技术、软件技术的发展,嵌入式系统被广泛的用于如生物医学仪器、智能汽车、通信设备、网络设备、仪器仪表、手持设备等诸多领域。
[1] 它是以应用为中心的,而嵌入式操作系统则是嵌入式系统应用中的核心。
嵌入式系统是计算机硬件和软件的结合体,或许还加上机械等其他部分,被设计来完成专门的功能。
在一些情况下,嵌入式系统是一个大的系统或产品的一部分,就象汽车上的防抱死装置,与通用计算机相对。
ucos-II操作系统概述及任务管理
演讲人:伍莹莹
背景
目前,嵌入式系统在家电、 移动电话、 PDA等 各种领域的应用日益广泛,程序设计也越来越复杂, 这就需要采用一个通用的嵌入式操作系统来对其 进行管理和控制。移植了操作系统的嵌入式系统 开发,可大大减轻程序员的负担,操作系统提供了多 任务的管理功能,只需专注于每个任务的管理。对 于不同的应用,可以按照相同的步骤完成系统设计。 如果更换硬件平台,则只需要对操作系统进行少量 的移植工作, 与硬件无关的应用代码完全无需修改。
任务划分原则
以CPU为核心,将与各种输入输出设备相关的功能划分为独立的 任务。 发现关键功能,用一个独立的任务或者ISR完成。 紧迫任务,用一个优先级较高的任务完成。 将耗时较多的数据处理功能划分出来,使用低优先级的任务。 将有相同事件触发的若干功能合并为一个任务。 将运行周期相同的若干功能合并为一个任务。 将关系密切的若干功能组合为同一个任务,达到功能聚合的效果。
uC/OS-II移植(与处理器相关的代码) OS_CPU.HOS_CPU_A.ASMOS_CPU_C.C
软件 硬件
CPU
时钟
μC/OS-II移植
移植, 就是使一个实时内核能在某个微处理器或微控制器上运行。
要使 μ C/OS- II 能够正常运行,处理器必须满足以下几 个条件 (1)处理器的 C编译器能产生可重入代码; (2)在程序中可以打开或者关闭中断; (3) 处理器支持中断, 并且能产生定时中断 (通常在 l0~l000Hz之间); (4)处理器支持能够容纳一定量数据的硬件堆栈; (5)处理器有将堆栈指针和其他CPU寄存器存储和读出
μC/OS-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个阶段。
ucosii实时操作系统分析-任务管理及调度精品PPT课件
(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操作系统中的进程调度模块的源代码
UC-OS-II内核调度分析
UC/OS-II内核调度分析一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。
但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。
内核本身对CPU的占用时间一般在2到5个百分点之间。
UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。
二.UC/OS-II内核调度特点:1.只支持基于优先级的抢占式调度算法,不支持时间片轮训;2.64个优先级,只能创建64个任务,用户只能创建56个任务;3.每个任务优先级都不相同。
4.不支持优先级逆转;5.READY队列通过内存映射表实现快速查询。
效率非常高;6.支持时钟节拍;7.支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制;8.支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文;9.每个任务有自己的堆栈,堆栈大小用户自己设定;10.支持动态修改任务优先级;11.任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存;12.任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态内存分配;13.任务的总个数(OS_MAX_TASKS)由用户决定;14.0优先级最高,63优先级最低;15.有一个优先级最低的空闲任务,在没有用户任务运行的时候运行.三.任务控制块OS_TCB描述:UC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。
uCOS2任务调度过程
(转)uCOS-II任务调度过程ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu 寄存器中(软中断完成),然后cpu开始运行该任务的代码。
内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(高优先级可强行占有低优先级正在使用的资源),但此事发生的前提是内核实时"检测"到了更高就绪的优先级了,那么内核是怎样来实时检测的呢?带着这个问题让我们再来看看任务的结构——里边有函数OSTimeDly(OS_TICKS_PER_SEC),一看就知道这是个延时函数,除了延时外它还会有其他用途呢?经查看其源码了解到里边有一条代码:OSSched(),对,函数OSTimeDly()的作用就是将此时正在运行的函数挂起(保存任务控制块OS_TCB中的相应信息)(任务控制块OS_TCB是系统分配给每个任务的信息存储单元),然后调用函数OSSched()进行任务切换,进而执行就绪的最高优先级任务。
此刻,我们了解到uCOS-II的任务切换是在执行的任务中调用延时函数OSTimeDly()进行的。
现在,还有一个问题还没解决,就是当延时到了,内核如何将资源返还给被延时挂起的任务?我们先来了解一下任务控制块(OS_TCB),任务控制块是一个数据结构,当任务的cpu使用权被剥夺时,uC/OS-II用它来保存该任务的状态。
当任务重新得到cpu使用权时,任务控制块确保任务从当时被中断的那一点丝毫不差地继续执行。
OS_TCB全部驻留在RAM中。
在OS_TCB中有一项时间延时项OSTCBDly,调用函数OSTimeDly()过程中有一步骤就是给OSTCBDly赋延时值。
uC/OS—II中有函数OSTimTick(),叫时钟节拍函数,它的一项工作就是给每个用户任务控制块OS_TCB中的时间延迟项OSTCBDly减1(如果该项不为零),当某项任务的任务控制块中的时间延时项OSTCBDly减为0时,这个任务就进入了就绪态,等待任务切换。
uCOS-II原理2_任务管理
O從SR任dy務Grp就緒表中獲取優先順序O別SRd最yT高bl[y的] 就緒任務可用如 D下7 類D6似D的5 代D4碼D:3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
00 1 0 1 0 00 0 1 1 0 00 00
保存CPU寄存器中的內容及存 v{oi在d m應ain(用voi程d) 式/t/中y這pe是定de系f義統un任定si在g義n務創e的d建堆一in用t個疊戶O數的任S據_務S棧類T時K型區,; 要非常簡單,
即定……義一個OS_STK類傳型遞任的務一的個堆疊數指組針和並在創建
使OS用Ta函sk數Create( )創建任 儲任務私有數據的需要,每個 一 可以個OS了任Ta。s務kM&CMr時yeTayatT把esak(s,k這Ag個u, 數組任//的//務任傳優地務遞先的給址順指任賦序針 務別的給參該數任務就
程式通過訪問它來瞭解CPU的利用率, 所以這個系統任務OSTaskStat( )叫做 統計任務
任務及的優優先先順權序別 用O的說該供O個固O應把統順共SSS戶_常明常使_定_用優計序OCLLS可F數應數用O地O程先任別_GWW權 每 來 的 越 序L以.用一的EOμ,E式順務是OHSSCSW一優大分 表 別根程旦優T中_系T中序,:E/_L_SO個先則為 示 越據式被先P通O統P還別因0TSRWR,_級順表應中定I過 E。低6_總I使此OPOS4IOS1R用任義序給T,I示別序數個是用用自_,I_LO把程務,別表P共把了戶動O2-任都別優字RW1…任式優則為示IO最統任賦E個務用最先0OSSO表務的先意:最_賦低計務給TS的一高順L__需順味低O值0示的優任可空PLW,優個,序RO要序著優E的任優先務以閒IWS1先數O數E別,別 系先T方,順, 使任S-務先_T1順字字,在的統順P法2序系用務_自R,P檔數中序I,別統的。動RO…I目可別+來則優如賦O1…-。會先果給2,,
嵌入式实时操作系统ucosii
医疗电子
ucosii在医疗电子领域 中应用于医疗设备、监
护仪、分析仪等。
物联网
ucosii在物联网领域中 应用于传感器节点、网
关、路由器等设备。
02
ucosii的体系结构与内核
任务管理
任务创建
ucosii提供了创建新任务的函数,如 OSTaskCreate(),用于创建新任务。
任务删除
ucosii提供了删除任务的函数,如 OSTaskDelete(),用于删除不再需要的任 务。
时间管理
01
02
03
时间节拍
ucosii通过定时器产生固 定时间间隔的节拍信号, 用于任务调度和时间管理 。
超时处理
ucosii支持超时机制,当 某个任务等待时间超过预 定阈值时触发相应的处理 函数。
时间函数
ucosii提供了一系列时间 函数,如OSTimeDly()、 OSTimeTick()等,用于时 间相关的操作和控制。
智能家居
ucosii适用于智能家居领域,可应用于 智能家电控制、家庭安全监控等场景。
02
03
医疗电子
ucosii适用于医疗电子领域,如医疗设 备控制、病人监控等,其可靠性和实 时性为医疗系统提供了有力保障。
THANKS。
应用软件的开发
任务管理
在UCOSII中,任务是用来实现应用程序功能的。在进行应用软件的开发时,需要创建和管理任务。这包括任务的创 建、删除、挂起和恢复等操作。
任务间通信
为了实现任务间的协同工作,需要进行任务间通信。UCOSII提供了信号量、消息队列、互斥量等机制来实现任务间 通信。在进行应用软件的开发时,需要利用这些机制来实现任务间的同步和数据交换。
第五章UCOS-ii任务管理
D7 D6 D5 D4 D3 D2 prio=29 0 0 0 1 Y 1 1
D1 D0 0 1 X OSRdyTbl[prio>>3] | = OSMapTbl[prio&0x07];
能把时间都用在调度上。因此就需要设计高效的多任务调度方
法。查找高优先级的任务,与正在运行的任务的优先级进行比
较以确定是否进行任务切换是内核在每个时钟中断都需要做的
事情。为满足这样的需要,μC/OS-II的开发者采用了就绪表Βιβλιοθήκη 5.1.1就绪任务表的结构
• 就绪任务表:实质是是一个INT8U类型的数组 OSRdyTble[] INT8U OSRdyTbl[OS_RDY_TBL_SIZE];
OSRdyGrp D7 D6 D5 D 4 D3 D2 0 0 1 0 1 0
D1 D0 0 0
OSRdyTbl[y ] D7 D6 D5 D4 D3 D2 0 1 1 0 0 0
D1 D0 0 0
y = OSUnMapTal[OSRdyGrp];
x= OSUnMapTal[OSRdyTbl[y]];
OSRdyGrp为0x69,以此值为偏移量查表
/*0x00 to 0x0F*/ /*0x10 to 0x1F*/ /*0x20 to 0x2F*/ /*0x30 to 0x3F*/ /*0x40 to 0x4F*/ /*0x50 to 0x5F*/ /*0x60 to 0x6F*/ /*0x70 to 0x7F*/ /*0x80 to 0x8F*/ /*0x90 to 0x9F*/ OSRdyTb1[0]为0x30,以此值为偏移量查表 /*0xA0 to 0xAF*/ /*0xB0 to 0xBF*/ 就绪任务组优先级最高的就是4(0<<3+4) /*0xC0 to 0xCF*/ /*0xD0 to 0xDF*/ /*0xE0 to 0xEF*/ /*0xF0 to 0xFF*/
UCOS-II操作系统详解
VμC/OS 和μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。
工作原理编辑uC/OS-II是一种基于优先级的可抢先的硬实时内核。
要实现多任务机制,那么目标CPU必须具备一种在运行期更改PC的途径,否则无法做到切换。
不幸的是,直接设置PC指针,还没有哪个CPU支持这样的指令。
但是一般CPU都允许通过类似JMP,CALL这样的指令来间接的修改PC。
我们的多任务机制的实现也正是基于这个出发点。
事实上,我们使用CALL指令或者软中断指令来修改PC,主要是软中断。
但在一些CPU上,并不存在软中断这样的概念,所以,我们在那些CPU上,使用几条PUSH指令加上一条CALL指令来模拟一次软中断的发生。
在uC/OS-II里,每个任务都有一个任务控制块(Task Control Block),这是一个比较复杂的数据结构。
在任务控制块的偏移为0的地方,存储着一个指针,它记录了所属任务的专用堆栈地址。
事实上,在uC/OS-II内,每个任务都有自己的专用堆栈,彼此之间不能侵犯。
这点要求程序员在他们的程序中保证。
一般的做法是把他们申明成静态数组。
而且要申明成OS_STK类型。
当任务有了自己的堆栈,那么就可以将每一个任务堆栈在那里记录到前面谈到的任务控制快偏移为0的地方。
以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者时钟中断实现。
然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。
由于哪个任务的堆栈里一定也存的是地址(还记得我们前面说过的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断CPU就会把地址压入堆栈),这样,就达到了修改PC为下一个任务的地址的目的。
任务管理编辑uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实时操作系统C/OS-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)的认证,可 以用于飞行器中
网站()
5
数 据 类 型
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned int INT16U; typedef signed int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef float FP32; typedef double FP64;
struct os_tcb *OSTCBPrev; //指向前一个任务控制块的指针 ……
INT16U
INT8U INT8U
OSTCBDly;
OSTCBStat; OSTCBPrio;
//任务等待的时限(节拍数)
//任务的当前状态标志 //任务的优先级别
……
} OS_TCB;
10
任务控制块链表
系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中 建立一个OS_TCB结构类型的数组OSTCBTbl[ ],每个数组元素就是一 个任务控制块,然后把这些控制块链接成一个如图所示的链表。由 于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫 做空任务块链表。 每当应用程序调用系统函数OSTaskCreate()创建一个任务时,系统 就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配 给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链 表的头指针OSTCBList将其加入到任务控制块链表中。
12
空闲任务和统计任务
内核总是创建一个空闲任务OSTaskIdle(); 总是设置为最低优先级,OS_LOWEST_PRIOR; 当所有其他任务都未在执行时,空闲任务开始 执行; 应用程序不能删除该任务; 空闲任务的工作就是把32位计数器OSIdleCtr 加1,该计数器被统计任务所使用;
6
实时操作系统C/OS-II
1
C/OS-II概述
2
任务概念
3
任务调度核心问题分析
7
任务调度概念
任务控制块 任务代码结构 任务优先级 一个任务的实现
8
任务控制块TCB
PCB:标识符、父进程标识符、
程序计数器、栈指针、 进程状态、优先级
一旦任务建立,一个任务控制块OS_TCB就被赋值。 任务控制块是一个数据结构,保存该任务的相关参数,包括任务 堆栈指针,任务的当前状态,任务的优先级等。 任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得 到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地 继续执行。
µC/OS-II操作系统中进程调 度模块分析
1
背
1、课程任务:
景
分析µC/OS-II操作系统中的进程调度模块的源代码
2、任务说明:结合课堂上讲授的进程的定义、进程控制块、进 程的创建以及处理机调度算法等知识点,分析µC/OS-II操作 系统中的进程调度模块的源码实现。进而理解进程控制块的 结构,理解进程运行的并发性,掌握进程调度的方法。
OS_TCB全部驻留在RAM中。
任务控制块就相当于一个任务的身份证,没 有任务控制块的任务是不能被系统承认和管 理的。
行
typedef
……
struct
os_tcb {
//指向任务堆栈栈顶的指针
OS_STK *OSTCBStkPtr;
struct os_tcb *OSTCBNext; //指向后一个任务控制块的指针
8、用户任务的实现(编写一个示例程序验证调度算法)--1 (43页例2-7)
9、任务状态切换(挂起和恢复任务)示例程序演示--0.9(可选) (48页例2-8)
10、用信号量实现任务间同步和互斥示例程序演示--0.9(可选)
(119页例4-4,122页例4-5) 11、用消息邮箱实现任务间通信示例程序演示--0.9(可选)(136页例4-8)
OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-1] OSTCBFreeList OSTCBTbl[0]
OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-2]
OSTCBTbl[1]
…… OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext
3、任务要求: (1)熟悉相关的理论知识;
(2)分析µC/OS-II操作系统中的进程调度模块的代码实现,并 辅以图表的形式描述实现流程;
(3)对核心代码作注释说明。 (4)按照模板撰写分析报告,以小组为单位参加答辩。
2
任
2、任务就绪表的结构---0.9 (29页2.4.1)
务
1、uC/OS的任务控制块---0.8 ( 25页2.3 ) 3、对任务就绪表的操作(将就绪任务状态填入就绪表)--0.9 (31页2.4.2) 4、根据就绪表确定最高优先级(采用查表法确定高优先级任务)--1 ( 31页2.4.2) 5、任务调度器实现流程图表述--1 (43页2.4.3) 6、任务调度器实现及源代码分析--1 (43页2.4.3 ) 7、任务切换的过程描述--0.8(可选) (43页2.4.3 )
OSTCBNext
OSTCBPrev OSTCBPrio
OSTCBNext
OSTCBPrev OSTCBPrio
空任务块链表
OSTCBPrev
OSTCBPrio
11
uC/OS的任务
uC/OS-II的任务有两种:用户任务和系统任务。由应用程序设 计者编写的任务叫做用户任务,由系统提供的任务叫做系统任 务。用户任务是为解决应用问题而编写的,系统任务是为应用 程序来提供某种服务的。 •目前,uC/OS-II最多可以对64个任务(包括用户任务和系统任 务)进行管理。