1 系统中断与时钟节拍

合集下载

嵌入式助理工程师硬件试题

嵌入式助理工程师硬件试题

嵌入式硬件助理工程师认证考试试题题库一、选择题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).(2)端口数据寄存器(GPADA T-GPHDAT)。

计算机组成原理习题(1)

计算机组成原理习题(1)

1字符信息是符号数据,属于处理(非数值)领域的问题,国际上采用的字符系统是七单位的(ASCII)码。

2 根据操作数所在位置指出其寻址方式:操作数在指令中,为___立即_______寻址方式,操作数地址在指令中,为___直接__________寻址方式。

3双端口存储器和多模块交叉存储器属于并行存储器结构,其中前者采用(空间)并行技术,后者采用(时间)并行技术。

4 CPU从内存取出一条指令并执行该指令的时间称为(指令周期),它常用若干个(CPU周期)来表示。

5计算机系统的层次结构从下至上可分为五级,即微程序设计级(或逻辑电路级)、一般机器级、操作系统级、(汇编语言)级、(高级语言)级。

6十进制数在计算机内有两种表示形式:(字符串)形式和(压缩的十进制数串)形式。

前者主要用在非数值计算的应用领域,后者用于直接完成十进制数的算术运算。

7一个定点数由符号位和数值域两部分组成。

按小数点位置不同,定点数有(纯小数)和(纯整数)两种表示方法。

8对存储器的要求是容量大、速度快、成本低,为了解决这三方面的矛盾,计算机采用多级存储体系结构,即(cache)、(主存)、(外存)。

9一个较完善的指令系统,应当有(数据处理)、(程序控制)、(数据传送)、(数据存储)四大类指令。

10 CPU中保存当前正在执行的指令的寄存器是(指令寄存器),指示下一条指令地址的寄存器是(程序计数器),保存算术逻辑运算结果的寄存器是(数据缓冲寄冲器)和(通用寄存器)。

11在计算机术语中,将ALU控制器和(内存)存储器合在一起称为(主机)。

12数的真值变成机器码时有四种表示方法,即(原码)表示法,(反码)表示法,(补码)表示法,(移码)表示法。

13广泛使用的(SRAM )和(DRAM )都是半导体随机读写存储器。

前者的速度比后者快,但集成度不如后者高。

14反映主存速度指标的三个术语是存取时间、(存储周期)和(存储器带宽)。

15 CPU从(内存)取出一条指令并执行这条指令的时间和称为(指令周期)。

北航ARM9实验报告:实验3uCOS-II实验

北航ARM9实验报告:实验3uCOS-II实验

北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。

通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。

二、实验环境1、硬件环境:ARM9 开发板、PC 机。

2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。

三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。

任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。

任务可以处于就绪、运行、等待、挂起等状态。

任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。

时间管理:通过系统时钟节拍来实现任务的延时和定时功能。

内存管理:提供了简单的内存分区管理和内存块管理机制。

中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。

四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。

2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。

3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。

4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。

5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。

6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。

GD32E230开发标准教程【ch08】SysTick PPT课件

GD32E230开发标准教程【ch08】SysTick PPT课件

实验原理
SysTick_VAL的结构、偏移地址和复位值如图8-7所示。
实验原理
SysTick_CALIB 的结构、偏移地址和复位值如图8-8所示。
实验原理
本实验涉及的SysTick固件库函数只有SysTick Config,用于设置SysTick并 使能中断。该函数在core_cm23.h文件中以内联函数形式声明和实现。
SysTick实验的程序架构如图8-9所示。
03
实验步骤与代码解析
实验步骤与代码解析
步骤1:复制并编译原始工程; 步骤2:添加SysTick文件对; 步骤3:完善SysTick.h文件;
实验步骤与代码解析
步骤4:完善SysTick.c文件; 步骤5:完善SysTick实验应用层; 步骤6:编译及下载验证。
实验原理
图8-2所示是SysTick模块初始化与中断服务函数流程图。
实验原理
图8-3是DelayNms函数流程图。
实验原理
图8-4是DelayNus函数流程图。
实验原理
SysTick_CTRL的结构、偏移地址和复位值如图8-5所示。
实验原理
SysTick_LOAD的结构、偏移地址和复位值如图8-6所示。
02
实验原理
实验原理
图8-1所示是SysTick功能框图,下面依次介绍SysTick时钟、当前计数值寄存器和重装载数值寄存器。
实验原理
SysTick时钟
AHB时钟或经过8分频的AHB时钟作为Cortex系统时钟,该时钟同时也是SysTick的时钟 源。由于本书中所有实验的AHB时钟频率均配置为72MHz,因此,SysTick时钟频率同 样也是72MHz,或72MHz的8分频,即9MHz。本书中所有实验的Cortex系统时钟频率 均为72MHz,即SysTick时钟频率也均为72MHz。

计算机组成原理与汇编语言程序设计期末试题ABC三卷及答案

计算机组成原理与汇编语言程序设计期末试题ABC三卷及答案

《计算机组成原理与汇编语言》课程试题A卷一、填空题(每空格1 分共 28 分)1.8位二进制补码所能表示的十进制整数范围是()至(),前者的二进制补码表示为(),后者的二进制补码表示为()。

2.每条指令由两部分组成,即()部分和()部分。

3.微程序顺序控制常用的两种方式是()方式和()方式。

4.8086CPU从结构上可以分为()单元和()单元。

5.半导体动态RAM靠()原理存贮信息,而半导体静态RAM靠()原理存贮息。

6.已知字符A的ASCII码为(),则字符B的ASCII码为(),字符D的ASCII码为()。

7.8086CPU具有()根地址线,直接寻址能力可达()。

8.运算器的主要功能是进行()。

9.通常I/O控制方式可分为5种,即()方式、()方式、和()方式、()方式、()方式。

10.一个源程序中可以包含代码段、()段及()段。

其中代码段是源程序中必不可少的,其它两个段可有可无。

11.标号和变量所具有的三种属性分别为()、()和()属性。

二、判断题(每小题3分共24)12.()在数字计算机中所以采用二进制是因为二进制的运算最简单。

13.()计算机表示的数发生溢出的根本原因是计算机的字长有限。

14.()表示定点数时,若要求数值0在计算机中唯一地表示为全0,应采用补码。

15.()CRC校验码的生成和检验大多采用软件实现。

16.()外(辅)存比主存的存储容量大、存取速度快。

17.()动态RAM和静态RAM都是易失性半导体存储器。

18.()Cache的功能全部由硬件实现。

19.()LCD显示器没有背景光源也能工作。

三、单项选择题:(每小题 3分,共 30 分)20.主机、外设不能并行工作的方式()。

A.程序查询方式 B.中断方式 C.通道方式21.在单独(独立)编址下,下面的说法是()是对的。

A.一个具体地址只能对应输入输出设备B.一个具体地址只能对应内存单元C.一个具体地址既可对应输入输出设备,也可对应内存单元D.只对应内存单元或只对应I/O设备22.在关中断状态,不可响应的中断是()。

计算机组成原理试题库(含答案)--

计算机组成原理试题库(含答案)--

计算机组成原理试题一、单项选择题(从下列各题四个备选答案中选出一个正确答案,并将其代号写在题干前面的括号内。

)1.为了缩短指令中某个地址段的位数,有效的方法是采取(C)。

A、立即寻址B、变址寻址C、间接寻址D、寄存器寻址2.某计算机字长是16位它的存储容量是64,按字编址,它们寻址范围是(C )。

A.64K B.32C.32K D.163.某一芯片其容量为512*8位,除电源和接地端外该芯片引线的最少数目是(C )。

A.21B.17C.19D.204.指令系统中采用不同寻址方式的目的主要是( C)。

A.实现存储程序和程序控制B.可以直接访问外存C.缩短指令长度,扩大寻址空间,提高编程灵活性D.提供扩展操作码的可能并降低指令译码难度5.寄存器间接寻址方式中,操作数处在( B )。

A.通用寄存器B.贮存单元C.程序计数器D.堆栈6是(A)的简称。

A.精简指令系统计算机B.大规模集成电路C.复杂指令计算机D.超大规模集成电路7.响应中断的时间是_ C 。

A.中断源提出请求;B.取指周期结束;C.执行周期结束;D.间址周期结束。

8.常用的虚拟存储器寻址系统由两级存储器组成。

A.主存-辅存;B.-主存;C.-辅存;D.主存—硬盘。

9.访问主存时,让处于等待状态,等的一批数据访问结束后,再恢复工作,这种情况称作。

A.停止访问主存;B.周期挪用;C.与交替访问;D.。

10.浮点数的表示范围和精度取决于。

A.阶码的位数和尾数的机器数形式;B.阶码的机器数形式和尾数的位数;C.阶码的位数和尾数的位数;D.阶码的机器数形式和尾数的机器数形式。

11.中断向量可提供。

A.被选中设备的地址;B.传送数据的起始地址;C.中断服务程序入口地址;D.主程序的断点地址。

12.加法器采用先行进位的目的是。

A.优化加法器的结构;B.节省器材;C.加速传递进位信号;D.增强加法器结构。

13.在独立请求方式下,若有N个设备,则。

A.有一个总线请求信号和一个总线响应信号;B.有N个总线请求信号和N个总线响应信号;C.有一个总线请求信号和N个总线响应信号;D.有N个总线请求信号和一个总线响应信号。

《嵌入式实时操作系统复习资料》

一、填空题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。

1、一般而言,嵌入式系统的构架可以分为4个部分:分别是(处理器)、存储器、输入/输出和软件,一般软件亦分为操作系统相关和(应用软件)两个主要部分。

2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,(嵌入式微处理器)(嵌入式DSP处理器)以及片上系统。

3、操作系统是联接硬件与应用程序的系统程序,其基本功能有(任务管理)、任务间通信、(内存管理)和I/O资源管理。

4.实时系统:指系统能够在限定的(响应)时间内提供所需水平的服务5.ucos-ii最多管理(64 )个任务6.ucos-ii中,OS_TaskStat任务的优先级占(62 ),OS_TaskIdle任务的优先级是( 63 )7 ucos-ii中,OSRdyTbl就绪表的大小是由宏定义:OS_RDY_TBL_SIZE来定义,由全局宏( OS_LOWEST_PRIO )来决定的,8. TCB中的四个成员变量:INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY ,用于(加速)任务就绪态的计算过程。

9.TCB内部最重要的元素放在第一个单元叫(OSTCBStkPtr),因此,这个变量是惟一一个能用汇编语言处置的变量,将其放在结构最前面,使得在汇编语言中处理这个变量时较为容易。

10.uC/OS-II是一个简洁、易用的基于优先级的嵌入式(抢占式)多任务实时内核。

11.任务是一个无返回的无穷循环。

uc/os-ii总是运行进入就绪状态的(最高优先级)的任务。

12.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。

所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由调度器(scheduler)来完成的。

13.(不可剥夺型)内核要求每个任务自我放弃CPU的所有权。

不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。

第10章 RTX操作系统介绍


项目中;
第4步:新建一个includes.h文件; 第5步:添加相应的头文件路径。
RTX 配置向导

任务运行在特权级模式。 滴答定时器主频 72MHz,这个也是 STM32F103 的主频。 系统时钟节拍周期 1ms。
RTX 的调试信息
除了创建的两个用户任务以外,还有系统创建的空闲任务
总结
嵌ห้องสมุดไป่ตู้式系统原理与应用
第10章 RTX操作系统介绍
温州大学物理与电子信息工程学院 杨卫波
10.1 RTX操作系统介绍
根据维基百科的定义,OS是一组管理硬件和为应用软件提供服 务的软件。 硬件的抽象:OS的首要任务正是把繁杂的底层硬件的执行细 节隐藏,提供给程序和用户一个相对抽象的概念。 资源的管理:如何优化资源的分配,减少有害的竞争,提高 某些资源的共享效率,都是操作系统关心的核心话题。
本章节主要目的是让大家对 RTX 操作系统有一个整体的认
识,从下一章开始正式的进入 RTX 操作系统的学习。
RTX流程图
08:39
嵌入式系统原理与应用
13
10.2.4 RTX 的调试方法
System and Viewer: Timer Number:0 表示使用芯片的滴答 定时器,1 表外设定时器。 Tick Timer:时钟节拍周期。 Roud Robin Timeout:时间片调度时任 务分配的时间片大小。 Stack Size:任务栈大小,单位字节。 Stack Overflow Check:设置是否支持栈 溢出检测。 Tack Usage:任务创建情况。 User Timers:软件定时器个数。 ID:任务的 ID 标示。 Name:任务的函数名。 Priority:任务优先级。 State:任务状态。 Delay:任务延迟时间。 Event Value:任务当前的事件标志数值 Event Mask:任务等待的事件标志数值 Stack Load:任务堆栈利用率。

嵌入式实时多任务操作系统的特征介绍

嵌入式实时多任务操作系统的特征介绍引言:适逢公司进行通用计算平台的硬件基础研究,在此硬件平台之上,必要引入通用的软件平台。

为此,操作系统无疑是最佳的选择。

在德国十二套软启动项目中,远程IO控制机的软件设计成功引入了实时多任务操作系统μC/OS—II, 本文结合作者的工作成果,针对μC/OS—II将嵌入式操作系统的基本特征和原理进行简单的描述,并对大家所熟知的实时特性概念进行简要的抛析。

嵌入式实时操作系统在国外在上世纪60年代便已发展,至今已有不下百种产品。

从在商业领域取得巨大成功的两个突出代表VxWorks和QNX;到开源并广泛传播的Linux;以及由知名公司所推出的WINCE等;再到由个人之力发展至今的μC/OS,每种操作系统皆有其自身的特点及所专长的应用领域,但同时作为嵌入式的实时多任务操作系统又有其共同的特征,以下将结合实际工作中所用到的μC/OS—II为大家进行简单的介绍。

首先,操作系统作为用户应用程序同系统硬件之间的接口,承担着系统全部软、硬件资源的分配、工作调度、控制协调并发活动的重任。

如图1所示为包含操作系统的软硬件体系结构。

图1比较于传统的PC机操作系统,除具有任务调度、同步机制、中断处理、文件功能外,嵌入式实时操作系统还具有如下几个主要特点:◆可裁减性,嵌入式系统开发所特有的一点便是具有有限的存储空间。

面向不同硬件资源的情况下,操作系统具有自身可裁减的特性,以适应系统的存储容量,以μC/OS—II为例,最小可将代码量裁减到2K+。

◆实时性,于军事及高端工业领域发展起来的嵌入式操作系统,系统所处运行环境极为复杂,要求极为苛刻。

对于外部的激励,操作系统能够及时的做出响应,来保证系统的可靠运行。

◆可移植性,操作系统作为通用型的软件平台,必要面对不同厂家、不同硬件架构的处理器平台。

因此为保证自身的可重用特性及兼容性的特点,操作系统多可进行移植,来适应不同处理器的硬件架构。

以μC/OS—II为例,在四款主流IP核PowerPC、ARM、MIPS和X86上皆可进行移植。

嵌入式操作系统ucos与linux比较

ucos2与linux的比较随着嵌入式计算机技术的迅猛发展,嵌入式操作系统的应用领域逐步扩大,嵌入式计算机已经深入到人类日常生活和生产的各个角落。

这次通过阅读相关资料,进一步加深了对嵌入式操作系统的了解,以下着重对ucos2和linux进行比较,谈谈对嵌入式操作系统的理解。

首先linux和ucos都是免费使用,源代码公开的操作系统,可供用户自由进行裁剪,添加,移植。

Linux是分时多任务多用户操作系统,ucos是实时多任务操作系统。

两者都可运行于多种平台,适应性好,linux不仅可以运行于32位机,也可运行于64位机,单核,多核也同样适用。

uCOS 2已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。

内核Ucos内核包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分,能够维持系统基本工作的部分都在这里。

而linux内核包括进程管理,内存管理,设备管理,网络管理四部分。

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

这些功能可由用户自行添加实现。

Ucos内核支持抢占,即在进行内核服务函数时,允许被中断服务中断,并且中断结束后可以重新进行任务调度。

Linux是非抢占式内核,实时性差。

当进程运行在用户态时,可以被优先级更高的进程抢占,但当他进入核心态时,优先级再高也不能抢占它。

实时性实时任务分为软实时和硬实时,硬实时对响应时间要求较高,且时间不被满足时会导致致命的错误,软实时随对响应时间有要求,但不是强制,不会给系统造成致命错误。

Ucos是一个基于优先级调度的抢占式的实时内核,不仅内核支持抢占,同时支持任务的抢占式调度,优先级低的任务可以被高优先级任务抢占,也可被中断服务抢占。

这就保证了系统可以尽可能快的对外部事件做出响应。

通用Linux主要考虑调度的公平性和吞吐量等指标,尽管系统可以通过把实时事件赋予高优先级的方法来实时响应实时事件,但效果有限,对于响应时间要求比较高的硬实时任务,无法满足要求。

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

1 系统中断与时钟节拍
1.1 系统中断
中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被系统识别,CPU
则保存部分(或全部)现场(context),即部分(或全部)寄存器的值,跳转到专门的子程序,称
为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后执行任务调度,程序回到
就绪态优先级最高的任务开始运行(对于可剥夺型内核)。
中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询(polling)
是否有事件发生。通过两条特殊指令:关中断(disable interrupt)和开中断(enable interrupt)可
以让微处理器不响应或响应中断。在实时环境中,关中断的时间应尽量的短,关中断影响中
断响应时间,关中断时间太长可能会引起中断丢失。中断服务的处理时间应该尽可能的短,
中断服务所做的事情应该尽可能的少,应把大部分工作留给任务去做。

1.2 系统时钟节拍
时钟节拍是特定的周期性中断(时钟中断),这个中断可以看作是系统心脏的脉动。操
作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间
隔取决于不同的应用,一般在10~200 ms之间。时钟的节拍式中断使得内核可以将任务延
时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越
快,系统的额外开销就越大。系统定义了32位无符号整数OSTime来记录系统启动后时钟
滴答的数目。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()
之后。μC/OSII中的时钟节拍服务是通过在中断服务子程序中调用OSTimeTick()实现的。时
钟节拍中断服务子程序的示意代码如下:
void OSTickISR(void) {
保存处理器寄存器的值;
调用OSIntEnter ()或是将OSIntNesting加1;
调用OSTimeTick ();
调用OSIntExit ();
恢复处理器寄存器的值;
执行中断返回指令;
}

2 时钟管理系统
2.1 μC/OSII时钟管理系统
μC/OSII原有的时钟管理系统类似于Linux,但是比Linux简单得多。它仅向用户提供一
个周期性的信号OSTime,时钟频率可以设置在10~100 Hz,时钟硬件周期性地向CPU发出
时钟中断,系统周期性响应时钟中断,每次时钟中断到来时,中断处理程序更新一个全局变
量OSTime。μC/OSII时钟中断服务程序的核心是调用OSTimeTick ()函数。OSTimeTick ()函数
用来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:
void OSTimeTick(void) {
OSTimeTickHook();// 调用用户定义的时钟节拍外连函数
while { (除空闲任务外的所有任务)
OS_ENTER_CRITICAL();//关中断
对所有任务的延时时间递减;
扫描时间到期的任务,并且唤醒该任务;
OS_EXIT_CRITICAL();//开中断
指针指向下一个任务;
}
OSTime++;//累计从开机以来的时间
}
在μC/OSII的时钟节拍函数中,需要执行用户定义的时钟节拍外连函数OSTimeTickHook
(),以及对任务链表进行扫描并且递减任务的延时。这样就造成了时钟节拍函数OSTimeTick
()有两点不
足:
① 在时钟中断中处理额外的任务OSTimeIickHook (),这样增加了中断处理的负担,影
响了定时服务的准确性;
② 在关中断情况下扫描任务链表,任务越多所需要时间越长,而长时间关中断对中断
响应有不利影响,是中断处理应当避免的。

2.2 改进的时钟管理系统
针对上述OSTimeTick ()的不足之处,需加以改进来优化时钟节拍函数。在Linux中一般
对中断的响应分为两部分:立即中断服务和底半中断处理(bottom half)。立即中断服务仅
仅做重要的并且能快速完成的工作,而把不太重要的需要较长时间完成的工作放在底半处理
部分来完成,这样就可以提高中断响应速度。
μC/OSII不支持底半处理,为了减轻时钟中断处理程序的工作量来提高μC/OSII的时钟
精确度,可以将一部分在每次时钟中断需处理的工作内容放在任务级来完成。这样就可以减
少每次时钟中断处理的CPU消耗,从而提高中断响应速度和μC/OSII的时钟精确度。为此,
定义任务OSTimeTask (),由它来处理原来在OSTimeTick()中需要处理的操作。因为μC/OSII
采用基于优先级的抢占式调度策略,而每次时钟中断处理程序结束后需要首先调度该任务执
行,因此让任务OSTimeTask()具有系统内最高优先级。由它执行用户定义的时钟节拍外连函
数OSTimeTickHook (),以及对所有任务的延时时间进行递减,并把到期的任务链入到链表
OSTCBRList中,OSTCBRList管理所有到期任务。OSTimeTask()函数伪代码如下:
void OSTimeTask() {
OSTimeTickHook()//用户定义的时间处理函数
while { (除空闲任务外的所有任务)
对所有任务的延时时间进行递减;
把所有要到期的任务链入到OSTCBRList链表中;
}
任务状态改为睡眠,调用OSSched ()进行任务调度;
}
在任务OSTimeTask()中,执行原来在时钟中断处理的用户函数OSTimeIickHook (),并实
现将延时到期的任务链入到OSTCBRList链表中,这样在时钟中断程序中就只需要扫描任务
到期的链表而不需要扫描整个链表,减少了关中断的时间。OSTCBRList为新建链表,它管理
所有到期的任务。
同时,需要减少OSTimeTick ()的执行工作量,只对OSTCBRList链表扫描,这样也减少了
关中断时间。OSTimeTick ()伪代码如下:
void OSTimeTick(void) {
OSTime++;
OS_TCB* ptcb=OSTCBList;// OSTCBRList指向所有到期任务的链表
while(ptchb!=null){
关中断;
唤醒任务;
开中断;
指针指向下一个任务;
}
}

3 小结
本文以开源的嵌入式操作系统μC/OSII为例,分析了操作系统的中断机制和中断应满足
的条件。介绍了μC/OSII系统时钟节拍,探讨了时钟中断函数中存在的不足,并且给出了解
决方案,从而有效提高了中断响应速度和μC/OSII的时钟精确度。

转载请注明出处,文章来源:
http://www.threeway.cc/sitecn/informationInfo.aspx?tid=1382&pid=2628

相关文档
最新文档