搜档网
当前位置:搜档网 › vxworks操作系统中中断的应用

vxworks操作系统中中断的应用

vxworks操作系统中中断的应用
vxworks操作系统中中断的应用

VxW orks操作系统中中断的应用Ξ

籍林峰,曹 伟ΞΞ

(南京船舶雷达研究所,江苏南京,210003)

摘 要:主要介绍了VxW orks操作系统中中断的重要性以及具体应用,其中涉及了信号量的概念并对其进行了简单描述。

关键词:嵌入式实时操作系统;中断服务程序;信号量

中图分类号:TP3 文献标识码:A 文章编号:100920401(2004)0320067203

Application of interruption in the operating system of VxW orks

JI Lin2feng,C AO Wei

(Nanjing Marine Radar Institute,Nanjing210003,China)

Abstract:The im portance and concrete application of interruption in the operating system of VxW orks is in2 troduced in this paper,in which the concept of the semaphore is inv olved and is sim ply described.

K ey w ords:embedded real2time operating system;interruption of service program;semaphore

1 引 言

对系统的响应时间有严格要求的系统,我们通常称之为实时系统。近半个世纪以来,随着计算机技术的发展,实时系统在各高精尖技术领域得到迅猛发展,具有实时操作系统的计算机系统在实时系统中也得到了广泛的应用。实时操作系统是嵌入式应用软件的基础和开发平台,它不同于分时操作系统,它的主要任务是对事件进行实时的处理。虽然时间可能在无法预知的时刻到达,但是软件必须在事件发生时在严格的时限内作出响应。VxW orks就是一个由Wind River Sys2 tem公司推出的嵌入式实时操作系统,具有多任务、可裁减、可靠性好、实时性高等特点,其在航天领域的出色表现而使之备受广大电子行业的青睐。硬件中断处理是实时系统设计的最重要、最关键的问题,同时中断服务程序也是实时系统的重要组成部分。

2 VxW orks中断服务程序

系统通过中断机制响应外部事件,并对外部事件作出处理,系统对中断的响应速度和中断服务程序的处理速度直接反映了实时系统的性能。VxW orks提供函数intC onnect(),它允许将指定的C函数与任何中断相联系。这个指定的C函数就是这个中断的中断服务程序,它不同于普通的任务模块,必须满足特别的要求:不许阻塞!

intC onnect()函数的原型是:

ST AT US intC onnect(VOI DFUNCPTR3vector,VOI D2 FUNCPTR routine,int parameter)

其中,vector是与之相连的中断矢量的字节偏移量, routine是连接到C函数的地址,parameter是传递给该函数的一个参数。该函数将指定的C函数routine与指定的中断向量vector相联系,函数的地址将存储在这个中断向量中,当中断被触发时,系统调用该函数,使用指定的参数parameter作为参数。中断服务程序应尽快结束,否则将引起阻塞,有许多函数不可调用,如:printf()、malloc()和semT ake()函数等,但可以使用semG ive()、logMsg()、msgQSend()和bcopy()这样的函数。表1列出了中断库中提供的部分中断处理函数。

下面是一个简单中断服务程序的例子:

#define interrupt-level0x20

v oid interruptCatcher(v oid)

{

int i,j;ST AT US connected;

76

雷达与对抗 2004年 第3期

Ξ

ΞΞ作者简介:籍林峰(1974-),男,山东隆尧人,南京船舶雷达研究所工程师,从事雷达终端研究。

收稿日期:2004203215

if((connected=intC onnect(I NUM-T O-I VEC(interrupt-level),

(VOI DFUNCPTR)interruptHandler,i))=ERROR)

 logMsg(“intC onnect failed\n”,0,0,0,0,0,0);

}

v oid interruptHandler(int arg)

{logMsg(“---------

-interrupt caught\n”,0,0,0,0,0,0);}

其中I NUM-T O-I VEC(interrupt-level)是一个宏,它将一个硬件中断号转换成中断向量。当中断0x20被触发时,函数interruptHandler()被调用,打印一行语句:“----------interrupt caught”。但是使用过intC onnect()函数的程序员会发现,这个中断服务程序只适合一级中断,而二级中断就不适合了;另外,在使用中会发现interruptHandler()函数中不能造任务,这就限制了中断响应函数的应用。

表1

函 数描 述

intC onnect()设置中断处理的C程序

intC ontext()如果是从中断级调用,返回真

intC ount()获得当前中断嵌套深度

intLevelSet()设置处理器的中断屏蔽级

intLock()禁止中断

intUnlock()重新允许中断

3 二级中断的响应

一个大的工程只有一级中断是不够的,通过级连产生二级中断是一个很好的方法。二级中断的应用有两个问题,一是中断号和中断向量的对应问题,二是级连中断的问题。上面已经提到I NUM-T O-I VEC(inter2 rupt-level)可以将一个硬件中断号转换成中断向量, VxW orks的中断号是从0x20开始的,比如0号中断是0x20,1号中断是0x21,依次累加;VxW orks提供了两个函数sysOutByte()和sysInByte(),用来对指定的接口读入或输出一个字节,这样我们就可以对相应的接口进行读、写,打开2号级连中断,并且打开程序员要用的二级中断。具体应用如下:

(a)在中断初始程序中加上

sysOutByte(0x21,sysInByte(0x21)&~(1ν2)); sysOutByte(0xa1,sysInByte(0xa1)&~(1ν2))

其中“sysOutByte(0x21,sysInByte(0x21)&~(1ν2));”语句是把2号级联中断打开,“sysOutByte(0xa1, sysInByte(0xa1)&~(1ν2));”语句是把10号中断打开。

(b)在中断服务程序结束时加上以下两条语句: sysOutByte(0xa0,0x20);

sysOutByte(0x20,0x20);

这样确保中断正常退出。

各个中断、任务之间可以通过中断上锁、任务上锁等方法进行控制,但为了保证系统的实时性,一种更好的机制是信号量。

4 信号量

信号量是荷兰学者Dijkstra提出的一种卓有成效的进程同步工具。在长期广泛的应用中,信号量机制又得到了广泛的发展,从整形信号量经记录型信号量,进而发展为“信号量集”机制。

在VxW orks嵌入式实时操作系统中,信号量被高度优化,并提供了最快的任务间通信机制。信号量是任务间进行通信、同步和互斥的主要手段。对于同步,信号量可协调外部事件与任务之间的执行;对于互斥,信号量可对共享资源访问进行互锁。

VxW orks有三种类型的信号量,用于不同的用途:

(a)二进制:最快最常用的信号量,应用于同步或互斥。

(b)互斥:为解决内在的互斥问题、优先级继承、删除安全和递归等问题而最优化的一种特殊的二进制信号量。

(c)记数器:类似于二进制信号量,但是随信号量释放的次数变化,适合于一个资源多个实例需要保护的情形。

信号量类型仅由创建函数确定,表2给出了信号量控制函数。

表2

函 数描 述

Sem BCreate()分配并初始化一个二进制信号量SemMCreate()分配并初始化一个互斥信号量SemCCreate()分配并初始化一个计数器信号量SemDelete()终止并释放一个信号量

SemT ake()获取一个信号量

SemG ive()提供一个信号量

SemFlush()解锁所有正在等待信号量的任务

函数Sem BCreate()、Sem MCreate()和SemCCreate()返回一个信号量I D,为其它信号量控制函数的使用提供句柄。在建立信号量时就已经确定了队列的类型,等待信号量的任务可以根据优先级顺序(SE M-Q-PRI2

86雷达与对抗 2004年 第3期

ORITY )或者先进先出顺序(SE M -Q-FIFO )排队。

二进制的信号量可以看成一个标志:对应的资源

是可用(full )还是不可用(em pty )。

当任务调用函数semT ake ()取一个信号量时,其结果依赖于在调用的时刻信号量是否可用,如图1。如果此时信号量可用,调用semT ake ()的结果是信号量变为不可用,任务继续执行;如果此时信号量不可用,调用semT ake ()的任务进入一个阻塞队列,进入等待该信号量变为可用的阻塞状态

图1

当任务调用SemG ive ()

释放一个二进制信号量,其结果也依赖于在调用时该信号量是否可用,如图2。如果此时信号量可用,释放信号量不产生任何影响;如果此时信号量不可用并且没有任务等待,那么信号量变为可用。如果信号量不可用并且有任务在等待,那么阻塞在该信号量队列中的第一个任务解除阻塞,信号量仍不可用。

图2

5 信号量在中断服务程序中的应用

中断服务程序必须尽快结束,以免阻塞低优先级的中断,这时可以使用信号量来进行控制。在中断服务程序中,不能试图获取一个信号量,因为信号量可能不可用,内核可能将其切换到阻塞状态。但是,中断服务程序可以释放一个信号量,解除等待在该信号量上的一个任务。理想情况是中断服务程序仅仅调用semG ive 系统调用,也就是说中断服务程序的主要功能应该是:发起一个任务来完成必要的处理。

上面的例子可以改成用信号量来控制:

(a )中断初始时调用SE M -I D sem BCreate (int op 2tions ,SE M -B-ST ATE initialState )创建一个二进制信号量;

(b )中断服务程序调用ST AT US semG ive (SE M -I D semId )来释放一个信号量;

(c )同时与此中断相关的任务调用ST AT US sem 2T ake (SE M -I D semId ,int timeout )来获取信号量。

当中断被触发时,通过ST AT US semG ive (SE M -I D semId )释放信号量,任务将执行;否则,任务将被阻塞,

等待下一个中断释放信号量。

同样,SE M -I D sem BCreate (int options ,SE M -B-ST ATE initialState )也可以由计数器信号量SE M -I D semCCreate (int options ,int initialC ount )来代替,计数器信号量除了向二进制信号量那样工作外,还保持对信号量释放

次数的跟踪。信号量每次释放,计数器加一;信号量每次获取,计数器减一。当计数器减到0时,试图获取该信号量的任务被阻塞。当信号量释放时,如果有任务阻塞在该信号量阻塞队列上,那么任务解除阻塞;如果没有任务阻塞,那么计数器加一。计数器信号量可以用来处理同时有多个中断的情况,这样不但可以迅速结束中断服务程序,而且可以充分地利用VxW orks 提供的多任务机制,更加灵活地处理中断。

6 结束语

以上对VxW orks 嵌入式实时操作系统进行了探索,其中涉及了中断、二级中断以及信号量的概念,详细介绍了中断在实时操作系统中的重要性及其应用。在VxW orks 嵌入式实时操作系统中信号量运用非常灵

活,熟练地掌握其在任务之间的通讯、互斥以及同步问题的应用,对编程非常有好处。

参考文献:[1] 孔祥营,柏桂枝.嵌入式实时操作系统VxW orks 及其开发环境T ornado [M].北京:中国电力出版

社,2002.[2] Wind River Systems.VxW orks 程序员指南[M].北

京:清华大学出版社,2003.

9

6籍林峰 等 VxW orks 操作系统中断的应用 

操作系统复习题答案

操作系统复习题 一、单项选择题:在每小题列出的四个备选项中只有一个是最符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.操作系统的主要功能是管理计算机系统中的()。【D 】A.程序B.数据 C.文件D.资源 2.产生死锁的基本原因是()和进程推进顺序非法。【 A 】A.资源分配不当B.系统资源不足 C.作业调度不当D.进程调度不当 3.动态重定位是在作业的()中进行的。【D 】A.编译过程B.装入过程 C.连接过程D.执行过程 4.存放在磁盘上的文件,()。【A 】A.既可随机访问又可顺序访问B.只能随机访问 C.只能顺序访问D.只能读写不能访问 5.对于硬盘上存放的信息,物理上读写的最小单位是一个()。【C 】A.二进制(bit)B.字节(byte) C.物理块D.逻辑记录 6.操作系统中利用信号量和P、V操作,()。【C 】A.只能实现进程的互斥B.只能实现进程的同步 C.可实现进程的互斥与同步D.可完成进程调度 7.SPOOLing技术可以实现设备的()。【C 】A.独占B.共享 C.虚拟D.物理 8.在存储管理的各方案中,可扩充主存容量的方案是()存储管理。【D 】A.固定分区B.可变分区 C.连续D.页式虚拟 9.磁盘是可共享的设备,每一时刻()进程与它交换信息。【C 】A.允许有两个B.可以有任意多个 C.最多一个D.至少有一个 10.逻辑文件存放到存储介质上时,采用的组织形式是与()有关。【B 】 ×××××试题答案及评分参考(×)第1页(共×页)

A.逻辑文件结构B.存储介质特性 C.主存管理方式D.分配外设方式 11.在操作系统中,()是竞争和分配计算机系统资源的基本单位。【B 】A.程序B.进程 C.作业D.线程 12.作业调度的关键在于()。【C 】A.选择恰当的进程管理程序B.用户作业准备充分 C.选择恰当的作业调度算法D.有一个较好的操作环境 13.文件的保密是指防止文件被()。【C 】A.篡改B.破坏 C.窃取D.删除 14.系统抖动是指()。【 D 】A.使用机器时,屏幕闪烁的现象 B.由于主存分配不当,偶然造成主存不够的现象 C.系统盘有问题,致使系统部稳定的现象 D.被调出的页面又立刻被调入所形成的频繁调入调出现象 15.避免死锁的一个著名的算法是()。【C 】A.先入先出算法 B.优先级算法 C.银行家算法D.资源按序分配法 16.在多进程的并发系统中,肯定不会因竞争()而产生死锁。【D 】A.打印机B.磁带机 C.磁盘D.CPU 17.用户程序中的输入、输出操作实际是由()完成。【C 】A.程序设计语言B.编译系统 C.操作系统D.标准库程序 18.在分页存储管理系统中,从页号到物理块的地址映射是通过()实现的。【B 】A.段表B.页表 C.PCB D.JCB 19.在操作系统中,进程的最基本特征是()。【A 】A.动态性和并发性B.顺序性和可再现性 C.与程序的对应性D.执行过程的封闭性 20.一种既有利于短小作业又兼顾到长作业的作业调度算法是()。【C 】A.先来先服务B.轮转 C.最高响应比优先D.均衡调度 ×××××试题答案及评分参考(×)第2页(共×页)

单片机_C语言函数_中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。 (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。 80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。 80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制 (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP 具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。 在这里我们讲下注意的事项 (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。 (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。 (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。 (4)单片机复位后,TCON,SCON给位清零。 C51语言允许用户自己写中断服务子程序(中断函数) 首先来了解程序的格式: void 函数名() interrupt m [using n] {} 关键字 interrupt m [using n] 表示这是一个中断函数 m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行程序指令。 n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3 中断号中断源 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1中断 4 串行口中断 (在上一篇文章中讲到的ROM前43个存储单元就是他们,这5个中断源的中断入口地址为: 这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

计算机操作系统选择题

1. 下列关于操作系统的正确叙述是() A. 操作系统是硬件和软件之间的接口 B. 操作系统是主机和外设之间的接口 C. 操作系统是用户与计算机之间的接口 D. 操作系统是源程序与目标程序之间的接口 标准答案:C 2. 在计算机系统得层次关系中,最贴近硬件的是() A. 应用软件 B. 实用软件 C. 操作系统 D. 用户 标准答案:C 3. 计算机系统把进行()和控制程序执行的功能集中组成一种软件,即操作系统 A. CPU管理 B. 作业管理 C. 资源管理 D. 设备管理 标准答案:C 4. 批处理系统的主要特点之一是() A. 非交互性 B. 实时性 C. 高可靠性 D. 分时性 标准答案:A 5. 分时系统的主要特点之一是() A. 交互性 B. 实时性 C. 高可靠性 D. 资源利用率高 标准答案:A 6. 高可靠性是()的主要特点之一 A. 分时系统 B. 实时系统 C. 批处理系统 D. 通用操作系统 标准答案:B 7. 允许多个用户以交互方式使用计算机的操作系统是() A. 分时操作系统 B. 单道批处理操作系统 C. 多道批处理操作系统 D. 实时操作系统 标准答案:A

8. 如果一个操作系统在用户提交作业后,不提供交互能力,只追求计算机资源的利用率,大吞吐量和作业流程的自动化,则属于()操作系统(分数:1,完成次数:157) A. 分时系统 B. 实时系统 C. 批处理系统 D. 通用操作系统 标准答案:C 9. 下列哪个观点不是描述操作系统的典型观点()(分数:1,完成次数:157) A. 操作系统是众多软件的集合 B. 操作系统是用户和计算机之间的接口 C. 操作系统是资源的管理者 D. 操作系统是虚拟机 10. 下列哪个系统与其他三个不同()(分数:1,完成次数:157) A. 现场压力采集系统 B. 火炮自动控制系统处理机 C. 飞机定票系统 D. 导弹制导系统 标准答案:C 11. 操作系统中最基本的两个特征是()(分数:1,完成次数:157) A. 并发和异步 B. 并发和共享 C. 共享和虚拟 D. 虚拟和异步 标准答案:B 12. 对操作系统在计算机系统中位置的说法正确的是()(分数:1,完成次数:157) A. 计算机硬件和软件之间 B. 计算机硬件和用户之间 C. CPU和用户之间 D. CPU和软件之间 标准答案:B 13. 分时系统追求的目标是()(分数:1,完成次数:157) A. 充分利用I/O B. 快速响应用户 C. 提高系统吞吐率 D. 充分利用内存 标准答案:B 14. 分时系统的()是衡量一个分时系统的重要指标(分数:1,完成次数:157) A. 周转时间 B. 用户数 C. 时间片 D. 用户响应时间 标准答案:D

嵌入式实时操作系统VxWorks入门

嵌入式实时操作系统VxWorks入门 VxWorksVxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。 VxWorks的实时性体现在能于限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。因此,实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。本文将对这个操作系统进行一个入门级的、全面的介绍。为力求展示其全貌,全文共分五章: (1)搭建VxWorks嵌入式开发环境; (2)简要介绍VxWorks的基本组成,内核的基本结构; (3)概述VxWorks板级支持包(BSP)的概念及VxWorks的启动过程; (4)介绍VxWorks设备驱动的架构及编写方法; (5)指明VxWorks应用开发的思路,任务调度及任务同步、中断与任务的同步机制。 以上各章中将贯穿着许多实例,由于本文定位于入门级教程,所以文中的实例都将十分简单。下面我们进入第一章内容的讲解。 嵌入式系统的调试调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O 电路(构造计算机系统)的目标电路板往往是必要的。虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。但是,并非所有人都能拥有一块物理的电路板。在这种情况下,我们如何构造一个模拟的开发环境,其学习效果就如同拥有完全真实的电路板一样呢?本文试图解答此问题,主体内容包括四个方面: (1) 利用VMware等软件模拟真实的目标机; (2) 构建VMware虚拟PC上VxWorks BSP,建立Bootrom和OS映像; (3) 修改Tornado相关设置,连接宿主机与目标机,建立调试通道; (4) 写一个简单的应用程序并下载到目标系统运行。 图1 嵌入式系统的调试 本章工作的最终目标为: (1)VxWorks在VMware启动成功并顺利运行,的开发模型: 图4 PC作为目标机 很遗憾,这种方法实际上非常麻烦,同时开动两台PC进行调试将使你和你的室友饱受折磨,既然他如此地热切于游戏和上网。因此,我们可以借助VMware来在本机上虚拟出另一PC。 VMware的确是天才的作品!在同一PC上,利用VMware几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑。VM的意义是Virtual Machine,即虚拟出一个逻辑的电脑,它可以提供基于Intel CPU的虚拟PC系统环境,包括CPU、内存、BIOS、硬盘和其他外围硬件设备。 下面我们讲解用VMware来建立一台虚拟PC的步骤: (1)并安装VMware; (2)使用VMware向导建立一个针对VxWorks的虚拟机;

中断服务程序流程图

第一讲: 第六章I/O接口原理-接口、端口、编址 回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。 重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。 讲授内容: 6. 1 输入/输出数据的传输控制方式 一、输入/输出的一般概念 1.引言 输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。因此,CPU与外部设备之间的信息交换技术比较复杂。 CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息。 2.输入/输出端口的寻址方式 微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。

根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式 这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。 方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。优点: ①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可 以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。 ②内存与外设地址的分配,可以用统一的分布图。 ③不需要专门的输入、输出操作指令。 缺点: ①内存与I/O端口统一编址时,在地址总线根数一定的情况下,使系统中 实际可以直 接寻址的内存单元数减少。 ②一般情况下,系统中I/O端口数远小于内存单元数,所以在用直接寻址方 式来寻址这些端口时,要表示一个端口地址,必须用与表示内存单元地址相同的字节数,使得指令代码较长,相应地读/写执行时间也较长,这对提高系统的运行速度是不利的。 Mortorola公司的M6800CPU等均采用这种寻址I/O端口的方式。 3. CPU与外设之间所传送的信息类型 CPU与I/O端口之间所交换的信息,可以有下列几种类型: ①数据信息:包括数字量、模拟量、开关量等,可以输入、也可以输出 ②状态信息:这是I/O端口送给CPU的有关本端口所对应的外设当前状态 的信息。供CPU进行分析、判断、决策。 ③控制信息:这是CPU送给I/O端口的控制命令,使相应的外部设备完成 特定的操作。 数据信息、状态信息和控制信息是不同类型的信息,它们所起的作用也不一样。但在8086/8088微机系统中,这三种不同类型的信息的输入、输出过程是相同的。为了加以区分,可以使它们具有不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入/输出的数据中设置特征位。

计算机四级操作系统多选题题库及答案

计算机四级操作系统多选题题库及答案 第一章 1.计算机系统的特点有( A C D ) A.能按用户的要求接收和存储信息 B.是一个由硬件系统组成的裸机 C.操作系统是它的一个组成部分 D.具有对不同用户进行不同控制执行的能力 E.允许各用户随意地使用系统中的资源 2.操作系统是计算机系统中的一种必不可少的系统软件,这是因为它能(A B C E ) A.为用户提供方便的使用接口 B.使硬件的功能发挥得更好 C.保证信息的安全和快速存取文件 D.提高源程序的编制质量 E.提高资源的使用效率 3.各类操作系统各有所长,但也存在一些不足,这些不足之处表现为( A B C ). A.批处理操作系统不允许用户直接干预作业的执行 B.分时系统采用交互方式工作,故对需处理时间较长的作业不太合适 C.实时操作系统中资源利用率不及批处理操作系统 D.批处理操作系统能实现并行工作,但不能提高吞吐能力 E.为了使用户满意,分时操作系统对用户请求的响应时间必须有严格的规定 4.在下述各项中,( A B C D E )是操作系统力所能及的工作. A.为用户合理分配处理器时间. B.保护主存中的程序和数据不被破坏 C.提供按名存取文件的功能 D.按用户要求启动外围设备 E.根据用户的意图控制作业的执行

第二章 1.系统软件是计算机系统中必不可少的软件,它包括( A B )等. A.操作系统 B.编译系统 C.接口软件 D.软件开发工具 E.软件测试程序 2.在下列的阐述中,( A B C E )是正确的. A.一个中央处理器任何时刻最多只能被一个程序占用 B.只有被操作系统选中的程序才能占用处理器 C.若一个程序在执行中出现了事件,则该程序就要让出处理器 D.一个被中断的程序在等待中断事件结束后就可立即占用处理器 E.中断装置发现中断事件后就要让操作系统程序占用处理器 3.采用通道结构的计算机系统中,中央处理器与外围处理设备之间的关系有( A B C D E ) A.中央处理器执行一条”启动I/O”指令可启动指定的设备 B.中央处理器与外围设备是可以并行工作的 C.外围设备与主存储器之间的信息传送工作不需要中央处理器的干预 D.外围设备工作结束后应把工作情况反馈给中央处理器 E.中央处理器可启动多台设备,让它们并行工作. 4.计算机系统中可用于存储信息的部件有( B C D E ) A.输入机 B.主存储器 C.磁带 D.寄存器 E磁盘 5.操作系统的结构设计应追求的设计目标是( A B C E ) A.正确性 B.高效性 C.维护性 D随意性 E.移植性 6.操作系统采用层次式结构的优点是( A B C ) A.能把操作系统的整体工作局部化 B.有利于操作系统功能的增.删.改 C.实现各层次的功能时都可利用较内层提供的功能 D.最外层可直接使用硬件提供的功能 E.各层之间允许双向调用,这样便于达到正确性的设计目标 第三章 1.能实现多道程序设计的计算机系统必须( A C D E ) A.具有中央处理器外围设备的并行工作能力 B.提供多个中央处理器

VxWorks下几种定时延时方法的小结

编程过程中,出于需要,大家或多或少要用到定时/延时。VxWorks下提供了几种定时/延时机制,根据收集的一些资料和VxWorks相关文档,在学习和上机实验的基础上,对它们的使用以及我所遇到的问题做一个总结,希望对大家能有所帮助。不正确之处,恳请斧正。 1 taskDelay taskdelay()提供了一个简单的任务睡眠机制,也常用于需要定时/延时机制的应用中。它的格式是STATUS taskDelay(int ticks /* number of ticks to delay task */),可以看出使用该函数实现延时的单位为tick(一般系统中一个tick都是ms级的)。在VxWorks下可以这样使用taskDelay()函数:taskDelay(sysClkRateGet()*1)。函数sysClkRateGet()返回系统的时钟速率,单位是tick数/每秒(利用函数sysClkRateSet()可以改变系统的时钟速率)。在POSIX中有一个与taskdelay()相对应的函数――nanosleep()(下文中有介绍)。这两个函数仅仅是延时单位不同,效果是相同的。 利用taskdelay(),可以将调用的任务移动到具有相同优先级的就绪队列尾部。特别的,可以通过调用taskdelay(0),将cpu交给系统中其他相同优先级的任务。延时为0的调用只能用于taskdelay()中,nanosleep()认为这种调用是错误的。 taskdelay()会导致调用的任务在指定的延时期间(以ticks计数)放弃cpu,使任务处于DELAY状态(因此,其不能用于中断服务程序中)。通常其受到任务调度的影响,但在等待一些与中断无关联的外部条件时,其是有用的。如果调用的任务受到一个信号,指出其没有被阻塞或被忽略,taskDelay()将返回ERROR,并在信号处理程序运行后设置errno为EINTR。 2 WatchDog VxWorks提供了一个看门狗定时器(watchdog timer)机制,利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。在VxWorks中,看门狗定时器作为系统时钟中断服务程序的一部分来维护。因此,与看门狗定时器相联系的函数运行在系统

计算机操作系统选择题大全

1. 单项选择题(共200个题目) 100236. 一般用户更喜欢使用的系统是(c )。 A.手工操作 B.单道批处理 C.多道批处理 D.多用户分时系统 100237. 与计算机硬件关系最密切的软件是(d). A.编译程序 B.数据库管理程序 C.游戏程序 D.OS 100238. 现代OS具有并发性和共享性,是由(D)的引入而导致的。 A.单道程序 B.磁盘 C.对象 D.多道程序100239. 早期的OS主要追求的是(A)。 A.系统的效率 B.用户的方便性 C.可移植 D.可扩充性 100240. (A )不是多道程序系统。 A.单用户单任务 B.多道批处理系统 C.单用户多任务 D.多用户分时系统 100241. (B)是多道操作系统不可缺少的硬件支持。 A.打印机 B.中断机构 C.软盘 D.鼠标100242. 特权指令可以在(C)中执行。 A.目态 B.浏览器中 C.任意的时间 D.进程调度中100243. 没有了(C )计算机系统就启动不起来了。 A.编译器 B.DBMS C.OS D.浏览器100244. 通道能够完成(C )之间数据的传输。

A.CPU与外设 B.内存与外设 C.CPU与主存 D.外设与外设 100245. 系统的主要功能有(C )。 A.进程管理、存储器管理、设备管理、处理机管理 B.虚拟存储管理、处理机管理、进程调度、文件系统 C.处理机管理、存储器管理、设备管理、文件系统 D.进程管理、中断管理、设备管理、文件系统 100246. 单处理机计算机系统中,(A)是并行操作的。 A.处理机操作和通道 B.程序与程序 C.主程序与子程序 D.用户程序与操作系统程序 100247. 处理机的所有指令可以在(D)中执行。 A.目态 B.浏览器中 C.任意时间 D.系统态100248. (B )功能不是操作系统直接完成的功能。 A.管理计算机硬盘 B.对程序进行编译 C.实现虚拟存储器 D.删除文件 100249. 要求在规定的时间内对外界的请求必须给予及时相应的OS是(B )。 A.多用户分时系统 B.实时系统 C.批处理系统时间 D.网络操作系统 100250. 操作系统是对(C )进行管理的软件。

操作系统试题

操作系统试题 课程代码:02326 第一部分选择题(共30分) 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.设计分时操作系统的主要目标是() A.吞吐量和周转时间B.交互性和响应时间 C.灵活性和可适应性D.可靠性和完整性 2.用户通常利用键盘命令、系统调用命令请求操作系统服务,有时也会用() A.宏指令B.汇编语言 C.作业控制语言D.计算机高级语言 3.操作系统中的中断处理程序很大部分是处理()中断的。 A.程序B.访管 C.I/O D.外部 4.用作业控制语言编写作业控制说明书主要用在()系统。 A.分时B.实时 C.批处理D.多CPU 5.采用多道程序设计能() A.增加平均周转时间B.发挥且提高并行工作能力 C.缩短每道程序执行时间D.降低对处理器调度的要求 6.程序状态字反映了()状态。 A.进程调度B.作业调度 C.与处理器有关的系统D.主存储器分配 7.为了对紧急进程或重要进程进行调度,调度算法应采用() 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.Spool技术是一种实现虚拟()的技术。

计算机组成原理中断实验报告

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

《操作系统》选择题大全

第1章绪论 3、操作系统负责管理计算机系统的(),其中包括处理机、存储器、设备和文件。 A.程序 B.文件 C.资源 D.进程 4、没有下列()设备计算机无法工作。 A.硬盘 B.软盘 C.内存 D.打印机 5、操作系统是计算机系统的核心软件。按功能特征的不同,可把操作系统分为[1]、[2]、[3]、网络操作系统 和分布式操作系统基本类型。其中[1]的主要目标是提高系统的吞吐率和效率,而[2]是一旦有处理请求和要求处理的数据时,CPU就应该立即处理该数据并将结果及时送回,例如[4]等。供选择的答案: [1][2][3] A、单用户系统 B、批处理系统 C、分时系统 D、微机操作系统 E、实时系统 [4] A、计算机激光照排系统 B、办公自动化系统 C、计算机辅助设计系统 D、航空订票系统 6、操作系统是一种()。 A.应用软件 B. 系统软件 C.通用软件 D. 工具软件 7、在下列性质中,哪一个不是分时系统的特征。() A. 交互性 B. 多路性 C. 成批性 D. 独占性 8、实时操作系统追求的目标是()。 A.高吞吐率 B.充分利用内存 C. 快速响应 D. 减少系统开销 9、操作系统是为了提高计算机的[1]和方便用户使用计算机而配置的基本软件。它负责管理计算机系统中的 [2],其中包括[3],[4],外部设备和系统中的数据。操作系统中的[3]管理部分负责对进程进行管理。操 作系统对系统中的文件进行管理的部分通常叫做[5]。 供选择的答案: [1] A、速度 B、利用率 C、灵活性 D、兼容性 [2] A、程序 B、功能 C、资源 D、进程 [3][4] A、主存储器 B、虚拟存储器 C、运算器 D、控制器 E、微处理器 F、处理机 [5] A、数据库系统 B、文件系统 C、检索系统 D、数据库 E、数据存储系统 F、数据结构 G、数据库管理系统 10、现代操作系统的两个基本特征是()和资源共享。 A.多道程序设计 B. 中断处理 C.程序的并发执行 D. 实现分时与实时处理 11、以下()项功能不是操作系统具备的主要功能。 A.内存管理 B.中断处理 C.文档编辑 D.CPU调度 12、批处理系统的主要缺点是()。 A.CPU的利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 13、引入多道程序的目的在于()。 A.充分利用CPU,减少CPU等待时间 B. 提高实时响应速度 C.有利于代码共享,减少主、辅存信息交换量 D.充分利用存储器 14、DOS是磁盘操作系统的缩写。 15、在分时系统中,时间片一定,(),响应时间越长。 A.内存越多 B.用户数越多 C.后备队列 D.用户数越少 16、操作系统是一组()。 A.文件管理程序 B.中断处理程序 C.资源管理程序 D.设备管理程序

Vxworks中断服务程序解析

Vxworks中断服务程序解析 中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect 内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect 要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题:void pciInt (int irq ){ PCLlNT RTN *pRtn; for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]); pRtn!=NULL; pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node)) (*pRtn->routine) (pRtn->parameter); } 当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。 需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks 除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码: #define INCLUDE_KERNEL #define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k 由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在<>中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。

VxWorks实时操作系统SIGNAL机制的应用

[摘要] 介绍VXWORKS实时操作系统的信号机制以及各种处理方法,特别是利用该机制实现异常情况的恢复和处理。 1.概述 信号可用来在同一任务内部或不同任务之间实现异步通信,从而改变对多个任务的控制流程。所有任务或中断服务程序均能向指定的任务发送信号,该信号的接收任务将立刻挂起当前的执行线程,而激活任务指定的信号处理程序。信号处理程序是由用户定义的,它关联与特定的信号,而且任务接收到该指定信号时的所有必要处理都在该程序中实现。信号的这种机制使得它特别适合于用来实现差错和异常处理。 2.信号屏蔽 在信号处理时,可通过信号屏蔽来选择需要进行处理的信号,接收到被屏蔽的信号,即使指定了相应的处理程序,也不作任何处理。 为了实现对信号的屏蔽,需要定义数据类型为sigset_t的变量,同时必须包含头文件“signal.h”。 下面介绍实现这一功能的函数: int sigemptyset ( sigset_t *pSet ) 该函数初始化信号集,使得该信号集不包含任何信号; int sigfillset ( sigset_t *pSet ) 该函数初始化信号集,使得该信号集包含所有信号; int sigaddset ( sigset_t *pSet , int signo ) 该函数向信号集中增加新的信号; int sigdelset ( sigset_t *pSet , int signo ) 该函数删除信号集中的信号; int sigismember ( sigset_t *pSet , int signo ) 该函数用来判断信号集是否包含某信号; int sigprocmask ( int how, const sigset_t *pSet, sigset_t *pOset ) 该函数用来设置信号屏蔽;这里,pSet为新的信号集,pOset为当前的 信号集,而how则指示处理方式,其取值与处理方式对应关系如下: SIG_BLOCK 结果信号集为当前信号集和指定信号集二者的并集,通过这种方式,可向当前信号集增添指定的元素; SIG_UNBLOCK 结果信号集为指定信号集的补集和当前信号集二者的交集;通过这种方式,可从当前信号集删除指定的元素;

vxWorks中断处理

Vxworks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求,因此,熟悉其中断的处理过程对于VxWorks操作系统的开发是至关重要的.本文通过编写和调试基于AT91RM9200处理器的VxWorks嵌入式操作系统的BSP,来讨论VxWorks操作系统的中断机制。 1 VxWorks中断处理机制及AIC AT91RM9200使用一个8优先级,可单独屏蔽中断的中断向量控制器AIC。在ARM体系结构中,有7种异常中断,对应有一个异常中断向量表。ARM体系结构要求这个异常中断向量表从0地址处开始,对于外部中断请求IRQ,系统又增加了一块由中断控制器控制的中断向量表。 2 AT91RM9200 BSP的中断驱动的实现 2.1 中断驱动中定义的函数 STATUS at91rm9200LvlVecChk (int*,int*); STATUS at91rm9200LvlVecAck(int,int); STATUS at91rm9200LvlEnable(int); STATUS at91rm9200LvlDisable(int); 2.2 高级中断控制器AIC的初始化 在usrInit()中excVecInit()函数对异常中断向量进行初始化.整个中断库,以及中断控制器的初始化都是在syslib.c中的sysHwInit2()函数中完成的.该函数在sysClkConnect()中被调用,因为系统时钟中断要在内核开放中断后就要使能,因此内核在初始化为一个多任务环境后,就产生一个usrRoot()的任务,在该任务中要建立系统时钟中断,因此调用了sysClkConnect()函数,中断库以及中断控制器的初始化也就完成了。 高级中断控制器必须进行初始化,其初始化是在板级支持包BSP的中断驱动程序中。具体的实现函数是void at91rm9200IntDevInit(void)。该函数在文件syslib.c的sysHwInit2()函数中调用。 at91rm9200IntDevInit(void)函数中主要是配置系统的钩子函数,然后对中断源向量寄存器和中断模式寄存器进行配置,同时要清除并禁止AIC中所有的中断。 2.3 中断驱动中的回调函数 在intEnt中,程序很快就进入了特权模式(SVC32),如果是中断可嵌套模式,要设置该模式下的堆栈,并且将中断深度intCnt值加1.然后跳转到intIntRtnPreempt中,在intIntRtnPreempt中为后来调用中断驱动中的函数开辟了32个字节的堆栈空间,并且将程序指针拉到at91rm9200LvlVecChk函数处执行,at91rm9200LvlVecChk函数是在中断驱动中定义的函数,是用来检测当前挂起的中断中,优先级最高的中断源。检测出最高优先级的中断后,首先要禁止该中断,因此要调用at91rm9200LvlDisable函数,该函数也在中断驱动中定义。在禁止中断的过程中,需要通过intLock和intUnLock函数来保护临界代码不被新的中断打断。

实时操作系统包括硬实时和软实时的区别

一.什么是真正的实时操作系统 做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platformteam封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统 1. 首先说一下实时的定义及要求: 参见Donal Gillies 在Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。 一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows 在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。这是一个基本的问题:并不是Windows不够快或效率不够高,而是因为它不能提供确定性,所以,Windows不是一个实时操作系统。 根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver 开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费

51单片机串行口中断服务程序

51单片机串行口中断服务程序 ---------------------------------------------------------------------------- //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //编程:聂小猛。该资料来自“51单片机世界”https://www.sodocs.net/doc/cc18138868.html,/~dz2000,欢迎访问。 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数 //putinbuf(uchar c);模拟接收到一个数据 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置 //putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 //CR;发送一个回车换行 //************************************************************************* #include //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 #define uchar unsigned char #define uint unsigned int #define OLEN 64 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 2 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志有=1 bit inbufsign; //接收缓冲区非空标志有=1 bit inbufful; //输入缓冲区满标志满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //放入一个字节到发送缓冲区 putbyte(char c) {uchar i,j; ES=0; /*暂停串行中断,以免数据比较时出错? */ if (outlast==putlast ) { i=(0-TH1); do{i--;j=36; do {j--;}while(j!=0);

相关主题