精华内容
下载资源
问答
  • 中断函数与普通函数的区别
    千次阅读
    2021-09-03 01:04:23

    相同点

    • 两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。
    • 两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。

    不同点

    • 两者的根本区别主要表现在服务时间与服务对象不一样上。
    • 首先,调用子程序过程发生的时间是已知和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序,调用指令所在位置是已知和固定的。而中断过程发生的时间一般的随机的,CPU在执行某一主程序时收到中断源提出的中断申请时,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的(软中断发生时间是固定的),也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;
    • 其次,子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;
    • 再其次,主程序调用子程序过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门的硬件电路才能完成中断处理的过程;
    • 最后,子程序嵌套可实现若干级,嵌套的最多级数由计算机内存开辟的堆栈大小限制,而中断嵌套级数主要由中断优先级数来决定,一般优先级数不会很大。
    • 不能返回值;不能向ISR传递参数;ISR应该尽可能的短小精悍;
    更多相关内容
  • 普有何不同中中断函数函数普有何网通网的网纤接作为主干级或区域过()光国家广域城域入到。对广的描域网一项确的述正是(,不同下列选项中。中中断表现网要宽带能力在(求的管理城域。为:相当于西医病精癃。下列选项中...

    不经段过下个阶列哪,中中断变化形态月经正常周期中卵关于巢在上的。

    避免为了这种情况,函数函数但有动荡可能引起社会,需要循(预警要遵事故,本功的基的发预警预测能是警示事故生和。

    普有何

    不同

    中中断

    函数函数

    普有何网通网的网纤接作为主干级或区域过()光国家广域城域入到。

    对广的描域网一项确的述正是(,不同下列选项中。

    中中断表现网要宽带能力在(求的管理城域。

    为:相当于西医病精癃。

    下列选项中,函数函数网的拓扑可以有(作为接入结构光纤。

    选用通常内治气瘿方剂是:。

    普有何备工违反用设执业情形规定册公程师了注。

    报废耗而用开因物质损从投称为入使历的始到所经时间,不同定的下条件在规设备使用。

    中中断被淘为(的时汰所后而用到因技经历间称从投入使设备术落。

    必须我们载荷根据设备所承受的实际,函数函数达到的循下的每一疲劳破坏疲劳环次应力总损积累计算计算根据理论率④数③损伤水平损伤伤率,函数函数对应的名对应的应险断面各每一平下①统荷所义应种载作用载荷计计据S曲线确定②根次数力及力水算危,本步序正骤排其基确的列顺是(,备的对设行计命进疲劳疲劳和剩余寿程度理论使用寿命实际损伤算。

    未进对于行疲命计机器劳寿算的设备,普有何的剩命疲劳可以用来余物这些估算理论理寿寿命设备,普有何定危险断修正面②疲劳环次后的应力③应应力计算⑥计①确确定确定各系力循劳损数计算④数⑤算疲伤或寿命。

    问题的原先解咨询中选择优则正决的确的是(。

    的原小儿因是阻最急性肠梗常见。

    来源:本文由教师资格题库 考研课题库网原创撰写,欢迎分享本文,转载请保留出处和链接!

    分享:

    展开全文
  • 中断服务函数与函数调用的区别

    千次阅读 2019-12-23 17:02:06
    在《微机原理》和《计算机组成》等课程[1-4]教学中(本文以MCS-51单片机为例),中断过程既是教学难点又是教学重点,它主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过...

    在《微机原理》和《计算机组成》等课程[1-4]教学中(本文以MCS-51单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果。

    1、两过程定义与作用

    子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。
    
    子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点(即调用指令的下一条指令),继续执行没有处理完的主程序,这一过程叫做(主程序)调用子程序过程。
    

    子程序结构可简化程序,防止重复书写错误,并可节省内存空间。计算机中经常把常用的各种通用的程序段编成子程序,提供给用户使用。用户在自己编写的程序中,只要会调用这些子程序,就可大大简化用户编程的困难。

    中断是计算机中央处理单元CPU与外设I/O交换数据的一种方式,除此方式外,还有无条件、条件(查询)、存贮器直接存取DMA和I/O通道等四种方式。由于无条件不可靠,条件效率低,DMA和I/O通道两方式硬件复杂,而中断方式CPU效率高,因此一般大多采用中断方式。
    

    中断概念是当计算机正在执行某一(主)程序时,收到一中断请求,如果中断响应条件成立,计算机就把正在执行的程序暂停一下,去响应处理这一请求,执行中断服务程序,处理完服务程序后,中断返回指令使计算机返回原来还没有执行完的程序断点处继续执行,这一过程称为中断过程。有了中断,计算机才能具有并行处理,实时处理和故障处理等重要功能。

    2、两过程的联系与区别

    2.1联系

    中断与调用子程序两过程属于完全不同的概念,但它们也有不少相似之处。两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。
    

    正是由于这些表面上的相似处,很容易使学生把两者混淆起来,特别是把中断也看为子程序,这就大错特错了。

    2.2区别

    中断过程与调用子程序过程相似点是表面的,从本质上讲两者是完全不一样的。
    

    两者的根本区别主要表现在服务时间与服务对象不一样上。首先,调用子程序过程发生的时间是已知和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序,调用指令所在位置是已知和固定的。而中断过程发生的时间一般的随机的,CPU在执行某一主程序时收到中断源提出的中断申请时,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的(软中断发生时间是固定的),也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;其次,子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;第三,主程序调用子程序过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门的硬件电路才能完成中断处理的过程;第四,子程序嵌套可实现若干级,嵌套的最多级数由计算机内存开辟的堆栈大小限制,而中断嵌套级数主要由中断优先级数来决定,一般优先级数不会很大。


    中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序 (ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。

    中断服务程序需要满足如下要求:

    (1)不能返回值;

    (2)不能向ISR传递参数;

    (3) ISR应该尽可能的短小精悍;

    (4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。

    参阅网上资料和个人的一些理解

    a.为什么不能有返回值?

    中断服务函数的调用是硬件级别的,当中断产生,pc指针强制跳转到对应的中断服务函数入口,进入中断具有随机性,并不是某段代码对其进行调用,那么如果有返回值它的返回值返回给谁?显然这个返回值毫无意义,如果有返回值,它必定需要进行压栈操作,这样一来何时出栈怎么出栈将变得无法解决。

    b.不能向ISR传递参数?

    同理,也是由于这样会破坏栈的原因,因为函数传递参数必定会要求压栈出栈操作,由于进入中断服务函数的随机行,谁给它传递参数都成问题

    c.ISR应尽可能的短小精悍?

    如果某个中断频繁产生,而它对应的ISR相当的耗时,那么对中断的响应就会无限的延迟,会丢掉很多的中断请求

    d.printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。

    这就涉及到一个中断嵌套问题,由于printf之类的glibc函数采用的是缓冲机制,这个缓冲区是共享的,相当于一个全局变量,第一层中断来时,它向缓冲里面写入一些部分内容,恰好这时来了个优先级更高的中断,它同样调用了printf,也向缓冲里面写入一些内容,这样缓冲区的内容就错乱了。
    http://www.cnblogs.com/thammer/p/5017329.html

    展开全文
  • 51在上电后,PSW的RS两个位默认为0,也即51默认使用工作寄存器组BANK 0,在默认状态下,对于普通的C语言函数,其传参、申请局部变量、导出函数的返回值等功能,keil将其翻译成汇编以后,肯定要使用R0~R7;...

    注:本文参考自https://blog.csdn.net/q2631837575/article/details/78776567

    51在上电后,PSW的RS两个位默认为0,也即51默认使用工作寄存器组BANK 0,在默认状态下,对于普通的C语言函数,其传参、申请局部变量、导出函数的返回值等功能,keil将其翻译成汇编以后,肯定要使用R0~R7;对于51的中断服务函数,它没有形参,也不用返回值,但是一般肯定有局部变量,这时就需要用到R0~R7了;试想,在执行普通函数时,R0~R7已经被使用了,在执行普通函数时,一旦发生中断,而中断函数也需要使用R0~R7,那怎么办?我们最先想到的是,在执行中断服务函数前先把R0~R7入栈(像累加器A、状态PSW等也要入栈这个不用说大家也知道),在中断服务完成后把R0~R7出栈,然后就能恢复现场,回到普通函数中去了,但是这8个Rn不能直接入栈,PUSH R0这样的语句是不允许的,要想R0入栈只能用两句:MOV A R0; PUSH A;这样的后果是,每次工作寄存器入栈都需要2*8=16条汇编语句才能完成,再加上A、B、PSW等寄存器入栈等,相当于每次中断都要消耗大量的时间来出栈入栈,影响程序速度。如何解决这一问题呢?51提供了这样一种机制,切换工作寄存器组,过程如下:

        普通函数的执行过程中正在使用BANK0的R0~R7,执行过程中突然发生了中断,而中断函数也想使用R0~R7,在执行中断服务函数前,我们切换工作寄存器组,切换的具体方法就是直接修改PSW的RS两个比特位,而不必把BANK 0入栈,本文开头的例子中using 2,就是说,在进入外部中断0的服务函数前,先入栈CPU寄存器,再把工作寄存器组由0切换成2,在退出中断服务后,先由BANK2切换回BANK0,并弹出CPU寄存器,由于BANK0和BANK2处在不同的RAM空间,互相不干扰,切换回BANK0之后就把那个普通函数的现场给恢复了。


    补图(过程图)

    展开全文
  • 嵌入式中断服务函数的一些特点

    千次阅读 2016-08-23 19:39:07
    中断服务程序需要满足如下要求:  (1)不能返回值;  (2)不能向ISR传递参数;  (3) ISR应该尽可能的短小精悍;  (4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。
  • 关于中断函数

    千次阅读 2014-05-20 19:43:56
    1.中断函数里面不允许休眠,例如调用sleep函数
  • 函数调用在用户态下运行,系统调用则通过中断实现,让程序从用户态陷入到内核态,执行相应的操作。 (过程)函数往往由编译系统提供,不同编译系统提供的(过程)函数可以不同;系统调用由操作系统提供。 系统调用...
  • 中断函数

    千次阅读 2014-10-22 12:44:15
    C51的中断函数的格式为:void FuncIr(void) interrupt x [using y] 以下是梦游的一些分析:  一、中断函数是一个特殊的函数,没有参数,也没有返回值;但是程序中允不允许使用return呢?答案是允许的,不过只能用...
  • C语言函数调用与中断处理

    万次阅读 2018-08-16 19:50:05
    C语言函数调用就好比,你在一个村庄,这个村庄共有100户人家,你就是CPU,100户人家就是100个函数。 你去串门,就是去执行一个函数,你每次只能串一户人家,进户出户就好比进栈出栈,你平时的任务就是不断的去王五...
  • 中断函数和中断处理函数

    万次阅读 2014-10-22 13:52:37
    (1)当你在做一个计算机(嵌入式)系统时,在为系统做初始化时往往会有设置中断向量的操作。 当你设置好某个特定的外部事件(比如定时器超时)的中断向量后,当你允许(使能)了该设备(定时器),那么等到特定...
  • 关于C51的中断函数要注意的几个问题(高手绕行)  最近在虾潭逛,发现一些小虾米对C51中断函数有些不了解,今天周末,抽空发个技术帖子,希望对小虾米有所帮助,如 有错误之处,还请指正,就当抛砖引玉吧! ...
  • Linux中断中断处理

    2021-01-09 15:38:55
     #在Linux中,中断程序为普通的C函数  3.上半部和下半部的对照  #中断处理分为两部分:上半部和下半部  #上半部:中断处理程序,接收到一个中断,立马运行  #下半部:同意稍后完毕的工作  4.注?中断处理...
  • 函数调用,中断以及进程切换,的现场保护的区别

    千次阅读 多人点赞 2019-09-28 22:43:10
    首先,函数调用是预料范围内的代码执行,是完全可控的,当前执行的函数调用另外一个函数时,是从当前代码段通过跳转指令主动跳转到另外一个代码段,只需保存跳转之前的栈顶指针(fp),栈底指针(sp)到栈空间,保存跳转...
  • 普通函数与回调函数的区别:对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用...
  • 在linux中,中断处理程序看起来就是普通的C函数,只不过这些函数必须按照特定的类型声明,以便内核能够以标准的方式传递处理程序的信息,在其他方面,他们一般的函数看起来别无不同。 那么终端处理程序其他内核...
  • STM32中断函数

    千次阅读 2017-01-04 12:47:22
    STM32中断函数名和普通的ARm裸板开发不同。使用stm32库函数编程时,中断函数名是固定死的。 具体函数名可以在启动文件startup_stm32fxxx_xd.s的Vector Table Mapped(中断函数向量表)中查看。 启动文件 startup_...
  • STM32学习记录之定时器中断代替延时函数实现更精准计时(延时) 延时在很多函数处理中都是一个必不可少的操作,对于很多初学者来说,都知道在代码里加一句delay()就能延时,如果再了解多一点就知道delay_us(xx)就能...
  • 静态函数与普通函数的调用规则

    千次阅读 2018-03-06 22:37:31
    static函数与普通函数区别:  用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。  在函数的返回类型前...
  • 展开全部中断程序是在中断事件发生时调用,程序也不知道什62616964757a686964616fe59b9ee7ad9431333365643536么时候有中断事件发生。子程序是在需要的时候调用,在程序里可以预见它的使用。因为中断是由系统调用的,...
  • 作为在中断中调用FreeRTOS系统的API函数的参考,disp_str()是显示屏的显示函数会将传入的字符串进行显示。void TIM5_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_...
  • 关于C51的中断函数要注意的几个问题(高手绕行)  最近在虾潭逛,发现一些小虾米对C51中断函数有些不了解,今天周末,抽空发个技术帖子,希望对小虾米有所帮助,如 有错误之处,还请指正,就当抛砖引玉吧! ...
  • 外部中断与内部中断原理使用

    千次阅读 2021-07-26 09:36:51
    1.解释 计算机执行某一程序时,发生了紧急事件或者有特殊请求,CPU暂停某程序的执行,转而去处理上述事件,处理完毕后再重新执行原来被打断的程序。...(这两个中断源标志与中断方式由特殊功能寄存器TCON的低四位控制)
  • 中断使能 中断使能的情况下:中断产生---->中断标志位被mcu置1---->mcu暂停主程序去执行中断程序(别忘记清中断)—>返回主程序 不要陷入误区: 并不是说不使能串口接受中断就无法接收数据,只是为了在串口...
  • //每一毫秒执行下中断 } 滴答定时器与普通定时器的区别: 1、滴答定时器是在内核中,普通定时器是接在外设上 2、系统滴答器在跑操作系统时是作为心跳的 3、滴答定时器只能倒数,而且最大24位,其他定时器功能更多,...
  • linux中断相关函数与中断上下文理解

    千次阅读 2013-12-24 15:35:08
    local_irq_enable():恢复本地中断,这一对函数只要调用一次就会达到所要功能,而不是嵌套的,这样会带来潜在的危险,所以我要需要一种机制可以恢复的以前的状态,而不是单纯的开关,所以内核提供了另外一对函数
  • 存在开机后初始化,在TIM3_Int_Init()里面,一打开允许中断函数TIM_ITConfig(),定时器立刻进入中断函数一次。只进一次。 初始化函数最后已经关闭定时器: TIM_Cmd(TIM3, DISABLE); //暂关闭TIMx外设。将这个函数...
  • 系统调用和函数调用的区别

    千次阅读 2018-10-10 13:34:49
    系统调用与函数调用的区别 系统调用 1.使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备 2.依赖于内核,不保证移植性 3.在用户...
  • 内核开始支持中断线程(threaded interrupt handler),使用接口request_threaded_irq;原来的request_irq也继续支持。使用时可根据实际情况选择合适的接口,可使用request_threaded_irq的地方没必要继续使用request_...
  • inline函数

    千次阅读 2019-05-18 14:47:39
    什么是inline函数 一个函数的程序进行代码拓展而不被调用,用相应的函数代码替换函数调用。 引入inline函数的原因 系统中会有这样的场景:for循环调用一个处理函数或则是递归调用一些算法。因为调用一个任意函数...
  • 2)中断处理函数:static irqreturn_t mpc83xx_fpga_interrupt(int irq,void *dev_id); { ........................问题:mpc83xx_pkt_hander()应该只是中断函数中的一个普通的调用吧,为什么计算看上去是并发处理的?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,364
精华内容 40,545
热门标签
关键字:

中断函数与普通函数的区别