精华内容
下载资源
问答
  • 中断服务程序一般包括
    千次阅读
    2021-05-20 03:38:35

    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 串行口中断

    这5个中断源的中断入口地址为:(在上一篇文章中讲到的ROM前43个存储单元就是他们,这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

    更多相关内容
  • 这样对PIC来说,无论发生何种中断程序 将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务 程序中。在发生中断时,断点地址被首先压...
  • CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器组,如切换到1组,然后退出中断时,再切回到0组(原来的...
  • 实现这一步骤的必要性在于:一旦中断服务程序驻留内存后,一般程序员使用这一新增的中断调用就如同调用DOS或BIOS的中断程序一样,只要了解其入口要求和返回参数就可调用。程序驻留在内存后,它占用的存储区就不会...
  • 当进程发出一个系统调用的请求时,由应用态切换到内核态。这样的内核控制路径被成为进程内核路径,也叫进程...当CPU执行一个与中断有关的内核控制路径的时候,被成为中断上下文。中断的上半部和下半部都属于ISR上下文。
  • 嵌入式开发之中断服务程序

    千次阅读 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)中断源:...

    在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。

    中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。

    (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        串行口中断

    这5个中断源的中断入口地址为:(在上一篇文章中讲到的ROM前43个存储单元就是他们,这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不是中断处理的程序,而是存放着中断处理程序的真正地址)

    INT0:0003H    0

    T0:   000BH    1

    INT1:0013H    2

    T1:   001BH    3

    串口: 0023H    4

    中断向量(中断入口地址)= 中断号x8 +3

    前面m意思很清楚,不同的m值表示这个函数是针对不同的中断源,比如m为1是表示它是定时器0的中断函数,

    如void time0() interrupt 1{}

    那么后面的using n 又是什么意思呢?在正在执行一个特定任务时,有更紧急的事情需要CPU来处理,涉及到中断优先权。高优先权中断低优先权正在处理的程序,所以最好给每个优先程序分配不同的寄存器组。

    CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器组,如切换到1组,然后退出中断时,再切回到0组(原来的程序在0组)。

    为了更好的了解这里意思,你可以看看工作寄存器组的作用是什么。

    展开全文
  • 一、主体不同1、调用中断服务程序:可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的。2、调用子程序:是指调用子程序的指令,包括调用指令(转子指令)和返回指令(返主指令)。二、特点不同1、调用...

    一、主体不同

    1、调用中断服务程序:可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的。

    2、调用子程序:是指调用子程序的指令,包括调用指令(转子指令)和返回指令(返主指令)。

    二、特点不同

    1、调用中断服务程序:当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作。

    2、调用子程序:子程序调用指令用于实现程序与程序之间的转移,与转移指令不同(转移指令用于实现同一程序内的转移)。子程序调用指令还可以进行嵌套调用,即可调用别的子程序,还可以实现递归调用。

    1e94f7ca13f925ed58589156cc56b238.png

    三、方式不同

    1、调用中断服务程序:保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。

    2、调用子程序:把常用的程序段编写成独立的子程序或过程,在需要时随时调用,调用子程序需要用到调用指令。

    参考资料来源:百度百科-子程序调用指令

    参考资料来源:百度百科-中断服务程序

    展开全文
  • 是风火轮出品的树莓派A20 按键中断驱动程序程序包括PI10,PI11两个按键中断,强调一下,这只是一个简单的测试程序,而不是实际产品中使用的驱动程序
  • STM32工程之中断服务程序在任意文件中STM32工程之中断服务程序在任意文件中STM32工程之中断服务程序在任意文件中STM32工程之中断服务程序在任意文件中
  • 串口中断服务程序

    千次阅读 2019-07-22 21:44:34
    今天下文主要在学习串口通信这一块,自己尝试写了串口通信的实验,将步骤记录如下:1,串口时钟使能;...然后就是看见视频里面用了管脚复用但没有在程序里面说明(CSDN搜STM32发103:什么时候用到IO复位(A...
  • 这是书上I/O中断部分“单重中断和多重中断服务程序的流程”,我的疑问是: 1、保护现场包括 :a.保护程序断点;b.保存各寄存器内容。书上说: a由中断隐指令完成,b由中断服务程序完成 我理解为:ab都属于保护现场...
  • 系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。...
  • 中断服务程序(ISR)

    千次阅读 2021-10-29 11:19:03
    中断服务程序 关键词:软中断中断向量、中断向量表、TSR内存驻留、DOS重入、中断请求、段地址、偏移量、寄存器、BIOS、DOS、setvect ( )、getvect ( )、keep ( )、disable ( )、enable ( )、geninterrupt ( )、int...
  • 中断服务程序流程图

    千次阅读 2020-12-20 04:41:10
    教学方法、实施步骤时间分配教学手段回顾5”×2板书计算机投影仪多媒体课件等讲授40”×2提问3”×2小结2”×2讲授内容:6.1输入/输出数据的传输控制方式一、输入/输出的一般概念1.引言输入/输出是微机系统与外部...
  • 中断中断处理程序1 中断2 中断处理程序3 注册中断处理程序4 编写中断处理程序共享的中断处理程序中断处理程序实例5 中断上下文6 中断处理机制的实现7 中断控制禁止和激活中断禁止指定中断线中断系统的状态 1 中断 ...
  • 1.1 设置中断程序 VxWorks提供函数intConnect(),它允许将指定的C函数与任意中断相联系。函数原型是: STATUS intConnect( VOIDFUNCPTR * vector, //要联系的中断向量 VOIDFUNCPTR routine, //中断发生时要调用的...
  • 嵌入式中的中断服务程序

    千次阅读 2018-05-05 16:07:13
    嵌入式中的中断服务程序中断是嵌入式系统中重要的组成部分,但是在标准 C 中不包含中断。许多编译开发商在标准 C 上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于__interrupt、#program ...
  • windows驱动注册中断服务程序

    千次阅读 2018-09-04 23:04:35
    一个驱动程序的标准中断服务例程的必要功能和建立一个ISR的需求。 8.1 ISR需求 8.1.1 ISR性能 8.1.2 附加的需求的驱动程序例程 8.1.3 建立一个ISR 8.2 ISR基本功能 8.3 ISR重叠I/O操作功能 1.1 ISR需求 一个...
  • 当某个中断发生的时候,首先CPU响应中断,将中断源的入口地址装载到程序计数器PC中,中断服务程序便是从该地址开始执行的。当中断服务程序执行完毕后,将返回原来的断点。下面分别介绍和中断系统相关的特殊功能...
  • 51单片机中断程序大全

    千次阅读 2021-12-31 10:51:41
    51 单片机中断
  • GDB实现程序中断

    千次阅读 2021-05-19 17:41:08
    中断调试是为了让程序运行时停在某一个或多个点上,然后进行调试操作,也就是分步调试程序。为什么要分步调试程序呢?具体可以归结为两个原因:为了方便我们获取程序运行时的各个阶段的信息。通过这些信息,可以分析...
  • 中断程序要注意哪些方面?

    千次阅读 2021-08-20 16:51:07
    包括中断服务程序的入口地址。 当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。 ...
  • 中断 为了对计算机的硬件(键盘,硬盘,鼠标等)进行管理,内核需要和这些硬件通信。一种方式是使用轮训(polling)的方式,这种方式周期性地查看所有硬件设备的状态并做相应处理,这会造成很多不必要的系统开销。...
  • 中断解读以及中断服务函数

    千次阅读 2021-08-19 15:24:50
    文章目录1、硬中断和软中断2、中断服务程序(ISR)3、面试题 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把...
  • 8086系统在存储器的最低1KB区域(00000H~003FFH)...在执行某一条INT n指令时,CPU首先对断点和现场进行保护,然后将中断指令中的中断类型号n乘以4,得到一个地址,这个地址就是n号中断服务程序的入口地址在中断向量
  • 本文介绍的是PIC单片及定时器溢出中断的设计思路及程序设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 457,205
精华内容 182,882
关键字:

中断服务程序一般包括

友情链接: rosler-2-channel.rar