μCOS-II中断和时钟

合集下载

uCOS-II简介

uCOS-II简介

uC/OS-II简介u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。

μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。

μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。

CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。

用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II 嵌人到开发的产品中。

μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至 2KB 。

μC/OS-II 已经移植到了几乎所有知名的CPU 上。

严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。

没有提供输入输出管理,文件系统,网络等额外的服务。

但由于uC/OS-II 良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。

uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。

任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。

63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。

uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。

系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,改任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,改任务负责统计当前cpu的利用率。

嵌入式μcosii内核实验四哲学家就餐问题的实现

嵌入式μcosii内核实验四哲学家就餐问题的实现

操作系统配置
#define OS_LOWEST_PRIO
7
/*任务优先级不能够不小于7*/
#define OS_SEM_EN
1
/*是否允许使用信号量功能*/
#define OS_MAX_EVENTS
5
/*最多能够有5个事件*/
#define OS_TICKS_PER_SEC 200 /*设置每秒之内旳时钟节拍数目*/
本试验中所用到旳µC/OS-II有关函数
□ OSTaskCreateExt () : 创建一种任务 □ OSSemCreate() :建立并初始化一种信号量 □ OSSemPend() :申请信号量 □ OSSemPost() :释放信号量 □ OSTimeDly():将一种任务延时若干个时钟节拍
操作系统配置
#define OS_TASK_CREATE_EN
1
/*允许使用OSTaskCreate()*/
#define OS_TASK_STAT_EN
0
/* 禁止统计任务*/
#define OS_MAX_TASKS
6
/*最多能够创建6个任务*/
ห้องสมุดไป่ตู้
#define OS_TASK_CREATE_EXT_EN 1 /*是否允许使用OSTaskCreateExt()*/
源程序阐明
TaskStart负责:
□安装时钟中断服务例程
–ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);
□初始化操作系统时钟
–ucos_timer_init();
□创建信号量
–fork[i] = OSSemCreate(1);

μCOSII在单片机MSP430F5438上的应用

μCOSII在单片机MSP430F5438上的应用


3 I O 在 MS 4 0 5 3 上 的移 植 x SI C I P3F4 8
I O 操作 系统 作为一 个开 放性 的代码 , 在 x SI C I 其
I NTI 6U t p; o
ot p = o t p;
t — — =(N 1 U )ts o p I T 6 po ;
入到 U盘 中的文件 中 , .t 如 t 文件 中。 x
OS

模仿 中断产 生时 的寄存 器人栈 的方 式编 写任务
堆栈初始化 函数如下 :
S K O T sSknt (od (ts )(o *d T S ak tli vi ak vi p ), vi d od

p a g,OS S po , NTt U o t _r TK ts I 6 p )
小 , 以移植到单片机 内运行 。 可
图 1 硬 件系统组成框 图
堕 鲢 型垒 鲞 国 妻 垂 蔓塑 蔓
器 件 与 电 路
囿 圈响四 @6 @ 6 该信 号采 集设 备 硬件设 计 主要 由以下 4 分构 部
成:
中。不 同的硬件平 台的 C U特性都不 相同 : P 入栈出栈
进行信 号分 析 。同时 , 该设 备有一个 U B接 口 , 以 S 可
实时地将采集 到的信号保存在外 挂 u盘 内的文件 中, 方便使 用者 移动或 查阅信号 采集 文件 。为保证 整个 系统 的实 时性 , 在单片机 中采用 了 c s I O 操作 系统 , I 该 系统稳 定性 强 , 有较好 的实 时性 , 具 且作 为公 开 的 源代码 , 于方便地 进行裁 剪及移植 , 便 同时 占用 内存
系到采集 的数 据是否 有效 干净 , 能否在 P C机 中对该

嵌入式实时操作系统ucos期末考试题

嵌入式实时操作系统ucos期末考试题

一、名词解释:1、OS:操作系统2、MCU:微控制器3、ISR:中断服务子程序4、FIFO:先进先出5、TCB:Task Control Block,任务控制块6、API:应用程序接口7、RTOS:实时操作系统8、UART:通用异步收发传输器9、MMU:内存管理单元10、JTAG:边界调试接口二、填空题1、( 优先级抢占和时间片轮转)是一种运行时间一到就剥夺进程处理器使用权的剥夺式调度。

2、实时系统的两个基本要求:( 逻辑或功能正确)、时间正确。

所谓时间正确是指(实时系统的计算必须在预定的时间内完成)。

3、临界区是指( 处理时不可分割的代码、每个进程中访问临界资源的那段程序)4、UCOS调用系统延时最小时间单位( 毫秒)5、UCOS配置文件中OS_TICKS_PER_SEC的数值定义为32,含义是〔时钟频率为32 hz)6如果某一个任务不是必须的监控任务,我们一般采用( 动态内存管理)的机制来创建该任务所需要的变量内存空间,要想能使用这种机制,必须首先将内存交给(操作系统)来统一管理7、如果系统中某一个资源属于独占资源,n个任务都需要使用,标准的做法是使用〔互斥信号量〕来解决8、在UCOS中,优先级用一个数字表示,数字越大表示任务的优先级别越〔低〕9、优先级调度的( 任务就绪表)标志进程抢占处理器的权利大小。

10、〔任务控制块〕主要用来记录任务的堆栈指针,任务的当前状态,任务的优先级别等一些与任务管理有关的属性的表。

11、临界区是指( 保证共享资源的完整性和可靠性的代码段)。

12、可重入指的是〔是一段代码(如一个函数)可以被多个任务同时调用,而不必担忧会破坏数据〕。

13、某事件周期不确定,持续时间较短,处理容忍度较长,通常我们采取在〔任务就绪表〕中发现该事件,在〔任务调度〕中处理该事件。

14、如果系统中有2个资源,n个任务都需要使用,标准的做法是使用(互斥信号量)来解决。

15、在UCOS中,最低优先级自动赋给( 空闲任务)这个系统任务。

uC_OS-II中文教程

uC_OS-II中文教程

1.01 INCLUDES.H
用户将注意到本书中所有的 *.C 文件都包括了以下定义:
#include "includes.h"
INCLUDE.H 可以使用户不必在工程项目中每个*.C 文件中都考虑需要什么样的头文件。 换句话说,INCLUDE.H 是主头文件。这样做唯一的缺点是 INCLUDES.H 中许多头文件在一些 *.C 文件的编译中是不需要的。这意味着逐个编译这些文件要花费额外的时间。这虽有些不 便,但代码的可移植性却增加了。本书中所有的例子使用一个共同的头文件 INCLUDES.H,3 个 副 本 分 别 存 放 在 \SOFTWARE\uCOS-II\EX1_x86L , \SOFTWARE\uCOS-II\EX2_x86L , 以 及 \SOFTWARE\uCOS-II\EX3_x86L 中。当然可以重新编辑 INCLUDES.H 以添加用户自己的头文 件。
#include "includes.h"
当编译器处理.C 文件时,它强制 xxx_EXT(在相应.H 文件中可以找到)为空, (因为 xxx_GLOBALS 已经定义) 。 所以编译器给每个全局变量分配内存空间, 而当编译器处理其他.C
文件时,xxx_GLOBAL 没有定义,xxx_EXT 被定义为 extern,这样用户就可以调用外部全局 变量。为了说明这个概念,可以参见 uC/OS_II.H,其中包括以下定义:
1.02 不依赖于编译的数据类型
因为不同的微处理器有不同的字长,µC/OS-II 的移植文件包括很多类型定义以确保可 移植性(参见\SOFTWARE\uCOS-II\Ix86L\OS_CPU.H,它是针对 80x86 的实模式,在大模式下 编译) 。µCOS-II 不使用 C 语言中的 short,int,long 等数据类型的定义,因为它们与处理器 类型有关,隐含着不可移植性。笔者代之以移植性强的整数数据类型,这样,既直观又可移 植,如表 L1.1 所示。为了方便起见,还定义了浮点数数据类型,虽然 µC/OS-II 中没有使 用浮点数。

基于μCOS—Ⅱ的软定时器算法的研究与实现

基于μCOS—Ⅱ的软定时器算法的研究与实现

中图分类号 : 3 2 TP 0
文献标识码 : A
1 引言
在嵌入式系统应用领域 , 由于成 本等因素的限制 , 存储 器资源通常 比较 紧张。在 存储器 资源 受限 的情 况下 , 引入 嵌入式操作系统环境进行软件开发是不 现实 的。直接对功 能需求较 多的应用进行任务规划并对 软件模块化 会比基 于 操作 系统更加复 杂。而且 , 软件模块 化的趋势使得各模块 、 任务之 间存在复 杂的相互触 发关 系, 这需要 类似 于操作 系 统 中采用的多任 务调度算法 的支 持 。这些需 求的 实现 , 依 赖于足够的定时器资源 。
匿 耍凰
图 1 软定时器链 表

本文设计了一 种能 够提 供足 够 多软 定时 器资 源 的算 法。该 算法 保留了源码公 开的  ̄ O - 实时操作 系统 任务 * SI C I
调度的基本思想 , 精简任务 调度的代码 , 大大减小 了软件所 软定时器链表 中的每 个软 定时 器节 点都 是 动态生 成 的 。系统 在使用定 时器之前 必须 先为定时器开辟一定大小 的堆栈空间 , 以便系统能 够动 态地给新 的定时器分 配内存 空 间 。在确定堆空间大小之 前 , 要先评估 系统在 端情
Ke r s :) I ; o t t r t s c e u e ; i e r cso ; mb d e y t m ; mo y r s u c ; p r t g s se ; y wo d : ( I s f i me ; a k s h d lr t m rp e ii n e e d d s s e me r e o r e o e a i y t m n s f t rrs u c ot i e o re me
维普资讯

uCOS-II在51单片机上的移植

uCOS-II在51单片机上的移植

功能
处理临界段方式选择 堆栈增长方向 进入临界区 退出临界区 就绪态最高优先级任务运行 任务级任务切换 中断级任务切换 时钟节拍 任务堆栈初始化
表7-1 需要修改的关键函数和宏定义
6
7.1.6 INCLUDES.H

* * * * * * 文件名 : INCLUDES.H * 作者 : Jean J. Labrosse ****************************************************************************/
9
7.1.8 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()
临界代码的概念。 uC/OS-II定义的两个宏。
{ OS_ENTER_CRITICAL(); /* µC/OS-II 临界代码段 */ OS_EXIT_CRITICAL(); }
#define OS_ENTER_CRITICAL() EA=0 #define OS_EXIT_CRITICAL() EA=1 #define OS_ENTER_CRITICAL() \
例如,任务A和任务B都要调用函数Swap(), 而该函数又使用了全局变量temp。于是当任 务A调用Swap()函数期间,系统发生了任务 切换而使任务B也调用了Swap(),那么任务B 将要改变全局变量temp的值,使任务A传递 给全局变量temp的值丢失而出现错误。
一般来说,一个可重入函数应该在函数中只 使用局部变量,因为函数的局部变量存储在 任务的堆栈中,所以可保证不同的任务在调 用同一个函数时不会发生冲突。
/ ******************* 与处理器相关的代码 ********************/ #define OS_CRITICAL_METHOD ?? #if OS_CRITICAL_METHOD = = 1 #define OS_ENTER_CRITICAL() ?? #define OS_EXIT_CRITICAL() ?? #endif

第4章uCOSII的时钟和中断介绍

第4章uCOSII的时钟和中断介绍

#define OS_ENTER_CRITICAL()
asm(“PUSH PSW”) asm(“DI”) #define OS_EXIT_CRITICAL() asm(“POP PSW”)
第2种方法可使CPU中 断允许标志的状态在 临界段前和临阶段后 不发生改变。
一些编译器对插入的行汇编代码优化得并不好,上述办法未必可行, 尤其是堆栈指针相对寻址模式时。
10
开关中断的实现方法1
根据微处理器和C编译器的不同,通过在移植文件OS_CPU.H 中配置OS_CRITICAL_METHOD来选择开/关中断的方法:
• OS_CRITICAL_METHOD==1用处理器指令关中断 • 执行OS_ENTER_CRITICAL( ),关中断 • 执行OS_EXIT_CRITICAL( ) ,开中断;
第 四 章: uC/OS-II的中断和时钟
目标:
介绍uc/osII实时操作系统的中断概念及时间管理,通过 本章的学习,应该掌握如下知识: 1)uC/OSII的中断管理和中断服务程序的 结构 2)uC/OSII的系统时钟及实现方法 3)时间管理服务:延时、取消延时
1
4.1 uC/OS-II的中断
中断:任务在运行过程中,应内部或外部异步事件的请求 中止当前任务,而去处理异步事件所要求的任务的过程叫 做中断。
cpu_sr = get_processor_psw();
disable_interrupts(); /* 处理临界代码*/ set_processor_psw(cpu_sr);
}
第3种方法的前提条件:用户使用C编译器具有扩展功能,用户可获得程序状 态字的值,这样就可以把该值保存在C语言函数的局部变量中,而不必压到 堆栈里。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
μC/OS-II中断和时钟
中断的概念 2
中断是一种硬件机制,用于通知 CPU 有个异步事件发生了。中断一旦被识别, CPU 保存务子程序(ISR)。中断服务子程序做事件处理,处理完成后,程序根据 进程类型回到相应位置执行。而时钟节拍是特定的周期性中断。这个中断可以 看作是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在 10mS 到 200mS 之间。时钟的节拍式中断使得内核可以将任务延时若干个整 数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。时钟节拍率 越快,系统的额外开销就越大。
中断响应 6
对于μC/OS-Ⅱ说来,这个函数是 OSIntEnter(),可剥夺型内核的中断响应时 间由表达式如下:
中断响应 = 中断延迟 + 保存 CPU 内部寄存器的时间 + 内复时间 7
在μC/OS-Ⅱ中,这个函数叫做 OSIntExit(),这个函数用于辨定中断是否脱离 了所有的中断嵌套。
μC/OS-II的中断 3
中断是一种硬件机制,用于通知 CPU 有个异步事件发生了。中断一旦被识别, CPU 保存务子程序(ISR)。中断服务子程序做事件处理,处理完成后,程序回到: 1)在前后台系统中,程序回到后台程序 2)对不可剥夺型内核而言,程序回到被中断了的任务 3)对可剥夺型内核而言,让进入就绪态的优先级最高的任务开始运行
中断延迟 4
可能实时内核最重要的指标就是中断关了多长时间。 所有实时系统在进入临界 区代码段之前都要关中断,执行完临界代码之后再开中断。关中断的时间越长, 中断延迟就越长。
中断延迟 = 关中断的最长时间 + 开始执行中断服务子程序的第一条指令的时间
任务控制块功能 5
功能: 记录任务的堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理有 关的属性。同时OS_TCB负责把代码和任务堆栈进行关联,从而使任务控制块、 任务代码和任务堆栈成一个整体。
中断恢复时间 = 判定是否有优先级更高的任务进入了就绪态的时间 + 恢复那个 优先级更高任务的 CPU 内部寄存器的时间 + 执行中断返回指令的时间
时钟节拍 8
时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之 间的时间间隔取决于不同的应用,一般在 10mS 到 200mS 之间。时钟的节拍 式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发 生时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大
相关文档
最新文档