精华内容
下载资源
问答
  • 2020-12-01 22:25:47

    中断程序和中断处理程序

    中断是指CPU接受到I/O设备发送的中断信号的一种响应。CPU会暂停正在执行的程序,保留CPU环境后自动转去执行该I/O设备的中断处理程序。执行完毕后回到断点。继续执行原来的程序。中断是由外部程序引起的所以称为外中断。
    
    由CPU内部引起的中断,例如在运算的过程中数据发生了上溢或者下溢,又或者程序出错,电源等故障。这类中断称为内中断,CPU也会暂停正在处理的程序去执行陷入该事件的中断处理程序。中断和陷入的主要区别是信号的来源。
    
    中断向量表:
        为了处理方便,会为每种设备配以相应的中断处理程序,并且将对应的中断处理程序的地址放入中断向量表中的一个表项中,当中断信号发来时,由中断控制器来确定中断号,再在中断向量表中找到相应的处理程序的地址,执行中断处理程序。
     中断优先级:
         在实际处理的过程中,经常会有很多中断的信号源所以系统会规定相应的中断优先级,对于不同优先级的中断信号同时发来时主要有两种处理方式:
         ①屏蔽中断,当处理器在处理一个中断的时候,会屏蔽掉其他的所有中断。直到处理器完成当前中断。
         ②嵌套中断,当处理器在处理中断的时候遇到优先级更高的中断,高优先级可以抢占低优先级的资源。优先处理高优先的中断。
    
    中断处理程序:
         中断处理程序主要分为两部分,①测定是否有未响应的中断信号,若有未处理的中断信号则先停止当前程序去转而执行中断处理程序。
         ②保护被中断进程的CPU环境,再把处理器的控制权交给中断处理程序的时候,需要先保存被中断的CPU环境,以便以后能够恢复运行。首先保存的是,从中断现场恢复到当前进程所需要的信息,通常由硬件自动将处理器状态字和保存在程序指令计数器中下一条指令的地址保存在中断保留区中,然后把被中断你的CPU的现场信息的内容都压入中断栈中。
         ③转入相应的设备处理程序。由处理器对各个中断源进行测试,确定引起本次中断的I/O程序,并且向中断信号的设备发送确认信息,再收到确认信号以后就立刻取消中断信号,再将相应设备的中断处理程序装入到程序计数器中。
         ④中断处理
         ⑤恢复CPU的现场,是否返回中断现场取决于两个因素,①是否采用了屏蔽中断,如果是屏蔽中断则直接返回CPU中断现场。
         如果是嵌套式如果没有优先级更高的中断则返回CPU中断现场,如果有则执行优先级更高的中断处理。
    
    更多相关内容
  • 这样对PIC来说,无论发生何种中断程序 将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务 程序中。在发生中断时,断点地址被首先压...
  • 中断系统的运行必须与子程序配合才能正确使用。... (4)编写中断服务程序处理中断请求。 前3条一般放在主程序的初始化程序段中。 举例如下:例1、假设允许外部中断0中断,并设定它为高优先级中断,其他中断源为
  • 中断服务程序与普通子程序有什么根本的区别? 答:中断服务程序是随机发生的,结束后要返回断点。普通子程序是安排好的,没有断点。
  • 中断服务程序举例2013-11-29.7z
  • CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器组,如切换到1组,然后退出中断时,再切回到0组(原来的...
  • 一,中断的定义 二 ,中断处理过程 三,8086/8088CPU可以处理256种不同类型的终端 四,中断服务程序的设计方法 五中断向量表的建立

    一,中断的定义
    在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需要暂时停止正在执行的程序,转去处理该事件(执行终端服务程序),并在处理完毕后,返回断点继续执行被暂停的程序,这一过程,称为中断。
    二 ,中断处理的过程主要有五步
    1.中断请求
    2.中断响应
    3.保护断点
    4.中断处理
    5.中断返回
    三,8086/8088CPU可以处理256种不同类型的终端
    四,中断服务程序的设计
    1.用户在设计中断服务程序时要预先确定一个中断类型号,不论是硬件中断还是软件中断,都只能在系统预留给用户的类型号中选择,
    2.确定中断类型号之后还要把中断服务程序入口地址置入中断向量表,以确保在中断响应时CPU能自动转入该类型号相对应的中断服务程序。
    3.中断向量表的建立
    设用户定义的中断类型号为60H
    1)DOS系统功能调用法
    功能号:(AH)=25H
    入口参数:
    (AL)=中断类型号
    (DS)=中断服务程序的入口地址的段地址
    (DX)=中断服务程序的入口地址的段地址
    下面程序段完成中断类型号为 60H的中断服务程序的入口地址的置入

    PUSH	DS          //保护DS
    MOV	DX,	OFFSET INT _60     //取中断服务程序INT_60的偏移地址
    MOV	AX,	SEG INT _60        //取中断服务程序INT_60的段地址
    MOV	DS,	AX
    MOV	AH,	25H     //送功能号
    MOV	AL,	60H      //送中断类型号
    INT	21H              //DOS功能调用
    POP	DS               //恢复DS
    

    2)直接装入法
    用传送指令直接将中断服务程序入口地址置入中断向量表。
    设中断类型号为60H,此类型号对应的中断服务程序入口地址应存放在中断向量表00180H开始的四个连续存储单元中。
    采用直接装入的程序段如下:

    XOR	AX,	AX	//清零
    MOV	DS,	AX
    MOV	AX,	OFFSET INT_60
    MOV	DS:	[0180H],	AX      // 置中断服务程序INT_60的偏移地址
    MOV	AX,	SEG INT_60
    MOV	DS:	[0180H+2],	AX        //置中断服务程序INT_60的段地址

    接下来会对可编程中断控制器8259 A进行理解,请大家拭目以待!
    学习是对体系结构的一种建立,今天不会的不要慌,当体系结构达到一个水准之后,或许明天就会了呢?
    目之所及,皆是回忆!
    心之所想,皆是过往!
    眼之所看,皆是遗憾!

    展开全文
  • 这是一个操作系统实验课上的全部内容,这一实验为时钟中断处理程序和键盘中断响应程序.本次实验的内容为操作系统工作期间,利用时钟中断,在屏幕24行79列位置轮流显示’|’、’/’、’-’’\’,适当控制显示速度...
  • 中断处理程序中断服务例程

    千次阅读 2017-07-20 11:27:21
    1 什么是中断2中断处理程序3中断服务例程4request_irq函数分析 1. 什么是中断 简单来说中断就是硬件设备与处理器的一种交流方式,比如当我按下一个键时,只有当处理器知道我按下了这个键并且做出相应...

    1. 什么是中断

    简单来说中断就是硬件设备与处理器的一种交流方式,比如当我按下一个键时,只有当处理器知道我按下了这个键并且做出相应的处理时,按键这个操作才是有效的。我们知道处理器的速度远远高于外围设备的速度,处理器与外设选择合适的交流方式就格外重要。轮询是一种方式,这种方式是内核周期性地对设备状态进行查询并作出相应的的动作,但这种方式会让内核做大量的无用功,这显然是不明智的。更好的方式是让外设在其需要的时候向内核发送信号,这就是中断机制。

    2.中断处理程序

    当一个中断发生时,内核应该有相应的处理方法,这个方法就是中断处理程序,一个中断处理程序对应一个中断号。中断处理程序是管理硬件的驱动程序的一部分,如果设备需要中断,相应的设备驱动程序就需注册中断处理程序。注册方式:使用request_irq()函数

      
    1. int
    2. request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),unsigned long irqflags, const char * devname, void *dev_id)

    函数参数: 
    irq:表示要分配的中断号 
    handler:函数指针,指向中断的实际中断处理函数 
    irqflags:中断处理程序的标志,举例来说: IRQF_DISABLED被设置后内核在处理中断处理程序本身期间要禁止所有的其他中断。 
    devname:与中断相关的设备的ASCII文本表示 
    dev_id:用于共享中断线,当一个中断处理程序需要释放时,dev_id提供唯一的标志信息。

    3.中断服务例程

    一条中断线对应一个中断一个中断处理程序,而多个设备可能共享一条中断线,那么如何让中断处理程序为不同的设备提供不同的处理方法。这就引出了中断服务例程。一个中断处理程序对应若干个中断服务例程。

    中断处理程序就相当于某个中断向量的总的处理程序,比如IRQ0x09_interrupt()是中断号为9的总处理程序,假如这个9号中断由5个设备共享,那么这5个设备都分别有其对应的中断服务例程。也就是说当有多个设备需要共享某个中断线时,中断处理程序必须要调用ISR,此时会调用handle_IRQ_event()

    4.request_irq函数分析

      
    1. int
    2. request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),
    3. unsigned long irqflags, const char * devname, void *dev_id)
    4. {
    5. int retval;
    6. struct irqaction * action;
    7. if (irq >= ACTUAL_NR_IRQS) //中断号是否超过最大值
    8. return -EINVAL;
    9. if (!handler) //函数指针是否为空
    10. return -EINVAL;
    11. #if 1
    12. /*
    13. * Sanity-check: shared interrupts should REALLY pass in
    14. * a real dev-ID, otherwise we'll have trouble later trying
    15. * to figure out which interrupt is which (messes up the
    16. * interrupt freeing logic etc).
    17. */
    18. if ((irqflags & SA_SHIRQ) && !dev_id) { //若中断共享但dev_id为NULL则出错
    19. printk(KERN_ERR
    20. "Bad boy: %s (at %p) called us without a dev_id!\n",
    21. devname, __builtin_return_address(0));
    22. }
    23. #endif
    24. action = (struct irqaction *)
    25. kmalloc(sizeof(struct irqaction), GFP_KERNEL); //创建irqaction结构体
    26. if (!action)
    27. return -ENOMEM;
    28. action->handler = handler; //将函数参数传给结构体
    29. action->flags = irqflags;
    30. cpus_clear(action->mask);
    31. action->name = devname;
    32. action->next = NULL;
    33. action->dev_id = dev_id;
    34. #ifdef CONFIG_SMP
    35. select_smp_affinity(irq);
    36. #endif
    37. retval = setup_irq(irq, action); //注册中断irqaction结构体
    38. if (retval)
    39. kfree(action);
    40. return retval;
    41. }
      
    1. struct irqaction {
    2. irqreturn_t (*handler)(int, void *, struct pt_regs *);//具体的中断服务例程
    3. unsigned long flags;//一组中断标志
    4. cpumask_t mask;
    5. const char *name;//中断设备名称
    6. void *dev_id;指定设备的主设备号和次设备号
    7. struct irqaction *next;//指向共享中断线的下一个 irqaction结构体
    8. int irq;//申请的中断号
    9. struct proc_dir_entry *dir;
    10. };
    展开全文
  • 该示例提供了中断处理的详细代码,含驱动程序和应用程序。用户可以直接调用接口进行中断函数的处理
  • Linux中断和中断处理

    2021-01-09 15:38:55
     #在Linux中,中断程序为普通的C函数  3.上半部下半部的对照  #中断处理分为两部分:上半部下半部  #上半部:中断处理程序,接收到一个中断,立马运行  #下半部:同意稍后完毕的工作  4.注?中断处理...
  • 1、 熟悉中断的概念、中断响应过程中断向量表以及系统是如何根据中断类型号在中断向量表中得到该中断对应的中断服务程序的入口地址等内容。 2、 掌握中断服务程序的设计方法。 2.7.2 实验预习要求 1、 复习中断的...
  • 嵌入式开发之中断服务程序

    千次阅读 2021-07-10 11:33:05
    在设计软件与外设交互时,需要考虑...中断则通过使能该外设的中断,当相应的事件发生时,MCU产生中断,调用对应的中断处理函数,由中断服务程序完成必要的处理后,将事件或数据通知应用程序,从而达到通知软件的目的

    在设计软件与外设交互时,需要考虑以下三个方面:

    • 怎样检出外设的事件,是使用中断还是轮询?
    • 使用中断时,哪些处理在中断服务程序中执行,哪些处理在应用程序中执行?
    • 中断服务程序怎样与应用程序通信?

    软件与外设的交互,基本有两种模式:轮询和中断。轮询是由软件定时地查询外设的各种寄存器,检查该外设是否有事件发生,如有事件发生,则执行相应的动作。中断则通过使能该外设的中断,当相应的事件发生时,MCU产生中断,调用对应的中断处理函数,由中断服务程序完成必要的处理后,将事件或数据通知应用程序,从而达到通知软件的目的。采用轮询方式时,为了不丢失外设的事件,需要非常频繁地查询外设的状态。如果需要轮询的外设较多时,会导致系统整体的运行效率降低。考虑到CPU与外设之间的速度差,如果涉及到与外设通信,一般采用中断的方式:只有当外设完成了数据发送或者接收,才中断CPU,获得处理,这样可以保证CPU的处理效率达到最高。

    由于中断服务程序的优先级高于所有的任务,当有中断发生时,MCU将会临时停止当前应用程序的运行,保存运行上下文(当前的PC寄存器、堆栈寄存器等),调用相应的中断服务程序。中断服务程序运行结束后,MCU会恢复被停止应用程序的运行上下文,从停止处开始继续执行。而且,当一个外设的中断服务程序在运行时,其他外设的中断(在支持中断嵌套的系统中比其优先级低的中断)必须等待,如果等待时间过长,可能会导致事件或数据丢失。因此为了不影响其它中断的处理,同时对应用程序运行的影响尽量小,中断服务程序必须尽量短小精悍,在尽可能短的时间内完成动作。

    当中断服务程序需要完成的处理较多时,操作系统提供了延迟中断处理的机制。操作系统管理一个用于延迟中断处理的任务,其优先级高于所有的任务,但低于所有的中断。从应用程序的角度看,中断服务程序和延迟中断处理是连续执行的,没有被打断;但从中断服务程序的角度看,耗时的处理被延迟到了一个任务当中,从而对其它外设中断处理的延迟可以达到最小化。图 1‑1是一个使用中断延迟处理的执行序列的例子。

    在图 1中,中断1的优先级高于中断2,在应用任务执行过程中,中断1发生,挂起当前应用任务,执行其中断服务程序。在执行过程中,中断2发生,由于其优先级较低,因此中断2的服务程序的执行被延迟。直到中断1服务程序执行结束,开始执行中断2的服务程序。当中断2的服务程序执行结束后,中断延迟处理任务开始执行,依次处理中断1和2的延迟中断处理。等所有延迟中断处理结束后,挂起的应用任务继续执行。

    1 中断处理的执行顺序

    当然,如果操作系统没有提供中断延迟处理的机制,在采用抢占式调度机制的系统中,也可以用普通任务模拟实现,只要赋予该任务最高优先级即可。

    一般嵌入式操作系统都会提供一系列中断服务程序专用的API,包括与任务通信(传递事件或消息)、同步等。因为中断服务程序不允许被阻塞,这些API需要保证在中断服务程序中即时运行,不会等待。如在FreeRTOS中,用于中断服务程序的API都以FromISR结束;在RTX中,都以isr_开头。非常容易识别。

    如果操作系统没有提供中断服务程序专用的API,则在使用时,需要非常小心地设置API的参数,以避免中断处理函数被阻塞,比如向任务的消息队列发送消息时,必须保证队列满时立即返回,而不是等待。

    嵌入式操作系统的任务调度如果是抢占式调度策略,则在从终端服务程序退出前,需要考虑是否需要触发任务调度。因为由于中断服务程序与应用程序间的通信,原先一些处于等待状态的任务可能变成了准备执行的状态,因此需要重新调度,找到最高优先级的任务执行。而触发任务调度的策略在不同的操作系统中是不同的,基本上有以下三种策略:

    • 一种是不需要用户在写中断服务程序时作任何特别的处理,比如RTX。在中断服务程序中调用中断服务程序专用的API时,操作系统判断是否需要触发任务调度,如果需要,则直接触发。
    • 一种是要求在退出中断服务程序之前调用一个操作系统的特殊API,比如uCOSII,在所有中断服务程序的最后,需要调用OSIntExit()。在该API中操作系统判断是否需要触发任务调度,并作相应的触发处理。
    • 还有一种是操作系统通过参数通知中断服务程序是否需要触发任务调度,比如FreeRTOS。在FreeRTOS中,某些中断服务程序专用的API中有一个参数pxHigherPriorityTaskWoken,用于指示在调用相应的API之后是否需要执行任务调度。同时还提供了执行任务调度的API portYIELD_FROM_ISR()供中断服务程序使用。需要注意的是,即使pxHigherPriorityTaskWoken指示需要触发任务调度,中断服务程序根据当前的执行上下文,可以不执行任务调度。这给用户提供了更多的自由度,以优化执行流程。这可以避免不必要的任务调度动作,也给用户更多的控制执行流程的手段。

    因此,在写中断服务程序时,特别是选用类似FreeRTOS之类操作系统时,需要考虑是否触发任务调度,以及在必要时触发任务调度。如果遗漏了任务调度的触发,在绝大部分情况下可能没有问题,极难定位和调试。

    展开全文
  • 二、特点不同1、调用中断服务程序:当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作。2、调用子程序:子...
  • 中断指当出现中断信号时,控制系统暂时停止执行当前的程序,转而执行处理新情况的程序,执行完毕 后,再返回原程序继续执行。
  • 中断中断处理程序1 中断2 中断处理程序3 注册中断处理程序4 编写中断处理程序共享的中断处理程序中断处理程序实例5 中断上下文6 中断处理机制的实现7 中断控制禁止激活中断禁止指定中断线中断系统的状态 ...
  • 中断服务程序流程图

    千次阅读 2020-12-20 04:41:10
    引言输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构...
  • 51单片机中断服务程序的设计

    千次阅读 2021-05-24 01:14:09
    中断系统的运行必须与中断服务程序配合才能正确使用。设计中断服务程序需要首先明确以下几个问题。中断服务程序设计的任务中断服务程序设计的基本任务有下列4条:(1)设置中断允许控制寄存器IE,允许相应的...
  • Linux内核使用中断的方式来管理硬件设备,中断本质上是一种电信号,设备通过和中断控制器引脚相连的总线发出电信号来发出中断中断控制器是一种控制芯片,多个设备的中断请求线同时连接到中断控制器上...
  • vxworks中断服务程序,中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统...
  • 这个是串口与CAN的中断收发程序,压缩包里接收与发送是分开写的,可以根据自己需要进行修改
  • IRQ –编写中断处理程序的实用程序此板条箱提供用于在嵌入式设备上处理中断的实用程序。 请参考changelo IRQ –编写中断处理程序的实用程序。此板条箱提供了用于处理嵌入式设备上的中断的实用程序。 请参考更改日志...
  • 完整的中断处理过程分为 1)中断响应的事前准备: 系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都...
  •  中断处理过程:一次完整的中断过程中断请求、中断响应和中断处理三个阶段组成。  中断处理流程:关中断->保存断电保护现场->判断中断源转到相应的中断服务->开中断->执行相应的中断服务程序(ISR)->关中断->...
  • 315人中断系统功能(1)进行中断优先权排队(2)实现中断嵌套(3)自动响应中断CPU在响应中断时通常要自动做三件事:自动关闭中断和把原执行程序的断点地址压入堆栈按中断源提供的中断矢量自动转入相应中断服务程序执行自动...
  • 操作系统-时钟中断-模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序,含详细代码 操作系统-时钟中断-模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序,含详细代码
  • c语言中的中断函数注意事项单片机_C语言函数_中断函数(中断服务程序)在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在...
  • 中断中断处理过程

    千次阅读 2020-12-20 04:41:16
    中断中断处理过程1. 中断和异常的概念区别Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:中断(interrupt)是异步的事件,典型的比如由I/O设备触发;...
  • 这是书上I/O中断部分“单重中断和多重中断服务程序的流程”,我的疑问是: 1、保护现场包括 :a.保护程序断点;b.保存各寄存器内容。书上说: a由中断隐指令完成,b由中断服务程序完成 我理解为:ab都属于保护现场...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 682,176
精华内容 272,870
关键字:

中断服务程序和中断处理程序