中断触发方式的比较

news/2024/7/5 4:38:11

      在前后台系统或者带有OS的系统,中断处理程序是相对比较难的,对系统的性能影响比较大。在带有OS的系统中,中断作为一个异步事件,还可以引发任务调度。在带有OS的系统中我们经常会关闭中断,而在ISR中我们常常也需要关闭一些中断,关闭中断如果处理得不好,很可能会出现很多想不到的结果,所以处理好中断非常的 关键。

      在这里对中断的触发方式进行介绍,不同的触发方式应用场合是不同的。一般中断分为电平触发和沿触发两种方式。
    沿触发: 这是很最常见的触发方式,我们可以用数字电路的方法来解释它的特性。沿触发应该应触发器来描述:  输入引脚(当作触发器的CLK) ----> 触发器------> 中断控制器 ,当输入引脚的相应的沿到来时,就会将触发器置1,并触发中断,触发器会一直保持电平1除非在ISR中用一条语句清0,否则会不断的触发中断,这也就是每次触发中断都要清0的原因。当有高优先级的中断运行后退出时,处理器检测到触发器的值为1,所以依然会进入中断服务程序。
    电平触发: 有的时候,边沿触发很容易产生毛刺并导致误中断,这时候就要使用电平触发,电平触发是持续触发,可以用数字电路的缓冲器来描述
     输入引脚 ----> 缓冲器 ----> 中断控制器  , 缓冲器的作用就是对信号整形,并增加驱动能力,缓冲器输出的数据和输入的数据相同,可以看出输入引脚的电平直接放映到输出引脚,以高电平触发为例,只要输入引脚的电平为高就立即触发中断,当ISR退出时如果电平依然为高则会再次触发中断,这也就是持续触发的来由,所以采用电平触发时必须保证电平的持续时间不能太长,在ISR中可能需要适当的延时操作保证退出时电平为低,或者读出电平值,电平变低时才退出。 在带用 OS的系统中,很多关键的数据或者代码区(临界区)都需要关闭中断,那么它对中断有什么影响呢?  电平触发如果电平的持续时间比较短,很可能在关闭中断后再开中断之前电平已经变低,结果开中断后中断就没有触发,结果是这次中断被漏掉了,所以在带OS的系统中一定不能关闭中断太久,在允许中断嵌套的情况下必须保证高优先级的中断执行时间不能超过电平的持续时间。 综合考虑,电平触发的持续时间不能太短也不能太长,在自己的系统中要仔细地考虑好中断地持续时间。
      另外,开关中断也是很讲究的,在我的开发中我就发现一种“ISR优先级翻转现象”,比如我有三个ISR,按照优先级的高低次序一次是 ISR0   ISR1  ISR2,我在ISR3 关闭ISR0的中断(因为共享数据需要互斥),可知ISR3 运行时ISR0不能得到响应,然而ISR1的优先级高于ISR2,所以在支持嵌套的情况下ISR1会打断ISR2的执行,显然这时即使ISR0中断到来也不会得到响应,这也就是我遇到的ISR优先级翻转问题,当然这可能是我编写程序的风格不好,但是分析起来也是很有趣的,类似于任务的优先级翻转。
    编写ISR一般要求尽可能的简短,网上有不少这方面的资料吧,这里就不罗嗦了。


http://www.niftyadmin.cn/n/3612826.html

相关文章

【原创】在Android系统下实现抓词

对于TextView显示的内容,通过点击屏幕,就能把当前显示的内容获取出来。以下的例子是通过判断空格来区分每个词,对于英文单词是适用的,如果想抓中文就得自己想办法了,当然也可以改变判断来抓词。 实现代码主码有 TextPa…

国外人经常上的网站,即全球各个领域最大的互联网网站

由于身处的行业原因,我经常上中国以外的互联网,其实全世界的网民跟国内的网民差不多,他们也经常上网,玩空间、网络视频、分享照片、写博客。由于国内对于互联网的封锁,所以国内大部分的童鞋并不了解外国人的上网都去哪…

MPEG1 Layer3 (MP3)解码算法原理详解

本文介绍了符合ISO/IEC 11172-3(MPEG 1 Audio codec Layer I, Layer II and Layer III audio specifications) 或 ISO/IEC 13818-3(BC Audio Codec)的音频编码原理。通过madlib解码库进行实现。1、程序系统结构其中同步及差错检查包括了头解码模块在主控模块开始运行后&#xf…

音频采样---解释

数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样…

ffmpeg库音频解码示例

一个英文版的例子&#xff08;有讲解&#xff09;ffmpeg的一些使用例子mpeg and SDL Tutorialffmpeg编译相关ffmpeg工作组(中文) #include <stdio.h>#include <stdlib.h>extern "C"{//#include "avcodec.h"#include "avformat.h"} i…

关于H264,X264,DivX,Xvid的小知识(转载)

HDTV的概念HDTV即High-Definition TV &#xff0c;高清晰数字电视。这个概念其实可以非常简单地表达出来。所谓“数字”&#xff0c;是相对于原来的“模拟”而言&#xff0c;是指拍摄、编辑、制作、传输、接收等全过程都使用数字技术的电视系统。所谓“高清晰”&#xff0c;则是…

如何在浏览器中获取当前执行的脚本文件名

背景 同事提了一个问题&#xff0c;如何在浏览器中动态插入的 JavaScript 文件中&#xff0c;获取当前文件名&#xff1f; 除了服务器输出一个文件名外&#xff0c;在脚本中获取应该只有下面三种做法。 解法A 普遍的解法&#xff0c;只能用于页面静态scripts标签引入或者单个动…

视频播放的基本原理(转)

当初看VLC代码花了不少时间&#xff0c;其中很大的原因是不太了解视频播放的基本原理。现在看来&#xff0c;几乎所有的视频播放器&#xff0c;如VLC、MPlayer、Xine&#xff0c;包 括DirectShow&#xff0c;在播放视频的原理和架构上都是非常相似的&#xff0c;理解这个对理解…