μCOS-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 之间。时钟的节拍 式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发 生时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大
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内核实验四哲学家就餐问题的实现
操作系统配置
#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上的应用
{
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期末考试题
一、名词解释: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中文教程
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—Ⅱ的软定时器算法的研究与实现
中图分类号 : 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单片机上的移植
功能
处理临界段方式选择 堆栈增长方向 进入临界区 退出临界区 就绪态最高优先级任务运行 任务级任务切换 中断级任务切换 时钟节拍 任务堆栈初始化
表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的时钟和中断介绍
#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、以下说法不正确的是(B )。
A、任务可以有类型说明B、任务可以返回一个数值C、任务可以有形参变量D、任务是一个无限循环2、用图形点阵的方式显示一个16*16点阵汉字需要(B )字节。
A、8B、32C、16D、643、下列描述不属于RISC计算机的特点的是(C)。
A.流水线每周期前进一步。
B.更多通用寄存器。
C.指令长度不固定,执行需要多个周期。
D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。
4、存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为( D)。
A、0x21B、0x68C、0x65D、0x025、μCOS-II中对关键代码段由于希望在执行的过程中不被中断干扰,通常采用关中断的方式,以下X86汇编代码正确而且不会改变关中断之前的中断开关状态的是(D)A. 先CLI、执行关键代码、再STIB. 先STI、执行关键代码、再CLIC. 先POPF、CLI、执行关键代码、再PUSHFD. 先PUSHF、CLI、执行关键代码、再POPF。
6、RS232-C串口通信中,表示逻辑1的电平是(D )。
A、0vB、3.3vC、+5v~+15vD、-5v~-15v7、ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。
A. R0 = R2 + (R3 << 1)B. R0 =( R2<< 1) + R3C. R3= R0+ (R2 << 1)D. (R3 << 1)= R0+ R28、IRQ中断的入口地址是( C)。
A、0x00000000B、0x00000008C、0x00000018D、0x000000149、S3C2420X I/O口常用的控制器是(D)。
(1)端口控制寄存器(GPACON-GPHCON)。
μCOS-Ⅱ的主要特点_μCOS-II实时操作系统概述
μCOS-Ⅱ的主要特点_μCOS-II实时操作系统概述1.源代码开放嵌入式实时操作系统μC/OS-II公开全部的程序清单。
绝大部分μC/OS-II的源代码是用移植性很强的ANSI C编写的,和微处理器硬件相关的那部分是用汇编语言编写的。
汇编语言编写的部分已经压缩到最低限度,使得μC/OS-II便于移植到其他微处理器上。
由于代码的开放性,使用者可以清楚地了解该操作系统各个方面的设计细节,通过自己修改源代码,来构造符合应用需求的操作系统环境。
2.可移植性μC/OS-II可以移植到许多微处理器上,条件是只要该微处理器有堆栈指针,有CPU内部寄存器入栈、出栈指令。
另外,使用C编译器必须支持内嵌汇编(inline assembly)或者该C语言可扩展、连接模块,使得关中断、开中断能在C语言程序中实现。
μC/OS可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。
3. 可固化性μC/OS-Ⅱ是为嵌入式应用而设计的,这就意味着,只要有固化手段(C编译、连接、下载和固化),μC/OS-II就可以嵌入到产品中成为当中的一部分。
4.可裁剪性在实际应用中,可以只使用μC/OS-II应用程序需要的那些系统服务。
也就是说某产品可以只使用几个μC/OS-II功能调用,而另一个产品则使用了几乎所有μC/OS-II的功能。
这样可以减少产品中的μC/OS-II所需的存储空间(RAM和 ROM)。
这种可裁剪性是靠条件编译实现的。
只要在用户的应用程序中(用#def ine constants语句)定义那些μC/OS-II中的功能是应用程序需要的就可以了。
5.抢先式μC/OS-II是抢先式的实时内核。
这就意味着μC/OS-II总是运行就绪条件下优先级最高的任务。
大多数商业内核都是抢先式的,μC/OS-II在性能上和它们类似。
6.多任务μC/OS-Ⅱ可以管理64个任务,然而,目前这一版本保留8个给系统,应用程序最多可以有56个任务。
