精华内容
下载资源
问答
  • 单片机_C语言函数_中断函数(中断服务程序)
    千次阅读
    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,显然不

    更多相关内容
  • PAGE / NUMPAGES 单片机_C语言函数_中断函数中断服务程序 ? 在开始写中断函数之前我们来一起回顾一下单片机的中断系统 ? 中断的意思学习过微机原理与接口技术的同学没学过单片机也应该知道我们在这里就不讲了首先来...
  • CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器组,如切换到1组,然后退出中断时,再切回到0组(原来的...
  • 进一步理解中断函数

    千次阅读 2021-05-18 17:10:05
    1.另一个外部中断前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可代码就是把“EX0”改为“EX1”,“IT0”改为“IT1...

    1.另一个外部中断

    前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可

    1488fbd92915c252e357be9cf007b4e9.png

    代码就是把“EX0”改为“EX1”,“IT0”改为“IT1”。

    interrupt后面的0要改为2,函数名我们改为“EXTI1_IRQHandler()”#include 

    #include //详见第六章第8讲

    void main()

    {

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

    LED_Init();//初始化LED硬件模块

    while(1);

    }

    void EXTI1_IRQHandler() interrupt 2

    {

    LED2=!LED2;

    }

    再次提醒,杜邦线的一头接的是P3.3。

    至于interrupt后面的数字为什么要为2,大家先熟悉这张图了解一下先

    0a8af14c0d48b5f773acec8c42c30407.png

    更多中断知识的概念参考《手把手教你学51单片机》文档6.5节。

    2.按键触发中断

    我们每次要把P3.2和P3.3外部拉低或释放,都需要拔插杜邦线,这样太麻烦,我们可以用按键来取代这些拔插动作,按键按下不放就相当于一直拉低,跟杜邦线一直插着GND一个效果,松开按键就跟杜邦线没插GND一样。

    可是P3.2和P3.3没有直接相连的按键,不过没关系,我们把杜邦线这样接,让P3.3和P2.3一起相连,K4的按键动作可以使P2.3和P3.3同步电平

    d1903544ed6d12a3d757745c0b3222e2.png

    我们要用到按键,所以别忘了初始化按键模块。#include 

    #include //详见第六章第8讲

    void main()

    {

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

    LED_Init();//初始化LED硬件模块

    KEY_Init();//初始化按键功能模块

    while(1);

    }

    void EXTI1_IRQHandler() interrupt 2

    {

    LED2=!LED2;

    }

    3.去抖动

    按键似乎没能很灵敏的按一下松手LED2就跳变一次亮或灭的效果,那是因为我们没有延时消抖,一个按键动作就存在好几个下降沿了,导致中断函数被执行了几遍。

    在中断函数中加延时就可以消除这种失灵现象了,不过在以后编程里不能在中断函数里使用延时,这样会使程序的执行效率大打折扣,我们本次只是作为测试代码才在中断函数里用延时。#include 

    #include //详见第六章第8讲

    void main()

    {

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

    LED_Init();//初始化LED硬件模块

    KEY_Init();//初始化按键功能模块

    while(1);

    }

    //请把P3.3和P2.3用杜邦线连接起来

    void EXTI1_IRQHandler() interrupt 2

    {

    delay_ms(50);//去抖动

    if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态,INT1已在“#include ”中定义好了

    {

    LED2=!LED2;

    }

    }

    这样就可以达到按下松手一次,LED2的状态只能取反一次的灵敏效果。如果我们一直按着不放,LED2也只是跳变一次而已,有点像不支持连按功能,这是因为“IT1=1;”的原因。

    要是改为“IT1=0;”,这样K4按键就有种支持连按的感觉从而LED2就会不停闪烁了。按键按下一直不放就会不停地进入中断函数。#include 

    #include //详见第六章第8讲

    void main()

    {

    IT1 = 0;   //低电平状态下触发

    EX1 = 1;

    EA  = 1;

    LED_Init();//初始化LED硬件模块

    KEY_Init();//初始化按键功能模块

    while(1);

    }

    //请把P3.3和P2.3用杜邦线连接起来

    void EXTI1_IRQHandler() interrupt 2

    {

    delay_ms(50);//去抖动

    if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态

    {

    LED2=!LED2;

    }

    }

    展开全文
  • 假如函数在调用它之前定义... 您可能感兴趣的文章:深入理解C++中public、protected及private用法C/C++函数调用的几种方式总结浅析C语言中堆和栈的区别关于C语言中参数的传值问题浅谈C语言函数调用参数压栈的相关问题
  • 为了满足在C语言源程序中直接编写中断服务程序的需要,C51编译器对函数的定义进行了扩展,增加了一个扩展关键词interrupt。他是函数定义式的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。定义中断...

    C51编译器支持在C源程序中直接开发中断程序,从而减轻了采用汇编语言编写中断服务程序的繁琐程度。为了满足在C语言源程序中直接编写中断服务程序的需要,C51编译器对函数的定义进行了扩展,增加了一个扩展关键词interrupt。他是函数定义式的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。定义中断服务函数的语法格式如下:

    返回值类型 函数名( )interrupt m [using n]<?XML:NAMESPACE PREFIX = O />

    {

    函数体

    }

    关键词interrupt后面的m是中断号,m的取值为0~31的正整数,编译器从8m+3处产生中断向量,具体的中断号m和中断向量取决于80C51,80C51中断源编号见表。80C51单片机可以在片内RAM中使用4个不同的工作寄存器组,每个寄存器组中包含8个寄存器(R0~R7)。C51编译器扩展了一个关键字using,专门用来选择不同的工作寄存器组。using

    表 80C51单片机中断源编号

    编号

    中断源

    入口地址

    编号

    中断源

    入口地址

    0

    外部中断0

    0003H

    3

    定时/计数器1

    001BH

    1

    定时/计数器0

    000BH

    4

    串行口中断

    0023H

    2

    外部中断1

    0013H

    后面的n是一个0~3的常整数,分别选中4个不同的工作寄存器组。在定义一个函数时,using是一个选项,如果不用该选项,则由编译器自动选择一个寄存器组访问。需要注意的是,关键字using和interrupt的后面都不允许跟带运算符的表达式。

    关键字using对函数目标代码的影响如下:

    在函数的入口处将当前工作寄存器组保护到堆栈中,指定的工作寄存器内容不会改变;函数退出之前将被保护的工作寄存器组从堆栈中恢复。

    使用关键字using在函数中确定一个工作寄存器组时必须小心,要保证任何寄存器组的切换都在控制之下,否则将产生不确定的函数结果。另外还要注意,带using属性的函数原则上不能返回bit类型的值,并且关键字using不允许用于外部函数。

    关键字interrupt也不允许用于外部函数,它对中断函数目标代码的影响如下:

    在进入中断函数时,特殊功能寄存器ACC、B、DPH、DPL、PSW将被保存入栈,如果不使用using进行工作寄存器组的切换,则将中断函数中所用到的全部工作寄存器都入栈保护,在函数退出之前恢复,中断函数由RETI指令结束。

    编写80C51单片机中断函数时应遵循以下原则:

    ①中断函数不能进行参数传递,如果中断函数中包含任何参数声明,都将导致编译出错。

    ②中断函数没有返回值,如果企图定义一个返回值,将得到不正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。

    ③在任何情况下,都不能直接调用中断函数,否则会产生编译错误。因为中断函数的退出是由80C51单片机指令RETI完成的,RETI指令影响80C51单片机硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,则RETI指令的操作结果会产生一个致命的错误。

    ④如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器组必须与中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须注意。如果定义中断函数时没有使用using选项,则由编译器自动选择一个寄存器组。另外,由于中断的产生不可预测,中断函数对其他函数的调用可能形成递归调用,需要时可将被中断函数所调用的其他函数定义成再入函数。

    ⑤C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号。该向量包含一个到中断函数入口地址的绝对跳转。

    下面给出一个中断编程实例。

    例 用C语言编写例6-4的程序

    分析:假设中断源A、B、C、D都没有中断,皆为高电平;若有一个产生中断,通过四或门在INT1引脚产生低电平,因为在主程序中已开放了中断,所以就会执行中断服务程序把flag设置为1,主程序判断flag=1,就会根据P1的低位来判断哪一位为低,即哪一个中断源产生中断。

    C51参考程序如下:

    99648cb8f17533ffac7f891db1fab69d.gif

    展开全文
  • C语言学习笔记--中断程序写法

    千次阅读 2021-05-18 17:10:34
    中断是CPU的一种核心功能,当CPU外部或内部发生指定事件时,就会触发中断,中断当前CPU正在执行的...标准C中并没有规定中断函数的写法,所以中断的语法,是各个编译器自己定义的。VCC编译器的语法规则如下:#pragma ...

    中断是CPU的一种核心功能,当CPU外部或内部发生指定事件时,就会触发中断,中断当前CPU正在执行的程序,保存当前状态,程序指针跳转中断服务程序的起始地址开始执行.执行完成后,跳回原程序位置恢复中断前的状态.

    每个CPU都有一张中断向量表,可以通过CPU的datasheet手册查找。标准C中并没有规定中断函数的写法,所以中断的语法,是各个编译器自己定义的。

    VCC编译器的语法规则如下:

    #pragma interrupt_handler adc_isr:15

    void adc_isr(void)

    {

    AdcVal = ADC&0x3FF;

    ADMUX =

    (1<

    //使用AVcc作为ADC参考电源

    ADCSRA |= (1<

    conversion

    }

    首先使用“#pragma interrupt_handler adc_isr:15”声明中断

    其中“#pragma

    interrupt_handler”是固定的,表示声明后面紧跟的“adc_isr”函数是中断向量号为15的中断服务函数

    然后余下的部分就是编写中断服务函数了。

    GCC编译器的语法规则如下:

    这里照抄一份网上流传的GCC编译器语法

    1.头文件

    如果使用GCC-AVR的中断操作,必须包括头文件interrupt.h,即 #include

    进一步说明:WinAVR20100110版本已经不支持使用头文件signal.h了,为了向后兼容,如果执意引入signal.h,其实相当于也是引入的interrupt.h。

    #ifndef _AVR_SIGNAL_H_

    #define _AVR_SIGNAL_H_

    //这两句加上最后的#endif是条件定义,防止重复引用的

    #warning "This header file is obsolete. Use

    ."

    //这一句【警告】指出,让我们使用interrupt.h

    #include

    //这一句告诉我们,即使你忘了或者不知道使用interrupt.h,那么也不会出错,引用signal.h相当于引如了interrupt.h。不过何必脱了裤子放屁——多此一举呢,直接引用interrupt.h就好了!

    #endif

    2.中断函数格式

    现在官方推荐的中断书写格式就有一种:

    ISR(INTERRUPT_vect)//INTERRUPT_vect是中断向量名称

    {

    //中断处理

    }

    3.中断向量的名称

    中断向量的名称在WinAVR的最近几个版本中有所变化,最好的办法就是打开查看X:\WinAVR-20100110\avr\include\avr路径下的你使用的处理器所对应的IO定义头文件。比如我使用的是ATmega16A,我就在此路径下找到了iom16a.h,打开它,找到

    这两句话后面的,就是本型号单片机定义的所有中断。以下就是ATmega16A的中断,全部照抄如下:

    ============================开始====================================

    #define INT0_vect_num 1

    #define

    INT0_vect _VECTOR(1) #define INT1_vect_num 2

    #define

    INT1_vect _VECTOR(2) #define TIMER2_COMP_vect_num 3

    #define

    TIMER2_COMP_vect _VECTOR(3) #define TIMER2_OVF_vect_num 4

    #define

    TIMER2_OVF_vect _VECTOR(4) #define TIMER1_CAPT_vect_num 5

    #define

    TIMER1_CAPT_vect _VECTOR(5) #define TIMER1_COMPA_vect_num 6

    #define

    TIMER1_COMPA_vect _VECTOR(6) #define TIMER1_COMPB_vect_num 7

    #define

    TIMER1_COMPB_vect _VECTOR(7) #define TIMER1_OVF_vect_num 8

    #define

    TIMER1_OVF_vect _VECTOR(8) #define TIMER0_OVF_vect_num 9

    #define

    TIMER0_OVF_vect _VECTOR(9) #define SPISTC_vect_num 10

    #define

    SPISTC_vect _VECTOR(10) #define USARTRXC_vect_num 11

    #define

    USARTRXC_vect _VECTOR(11) #define USARTUDRE_vect_num 12

    #define

    USARTUDRE_vect _VECTOR(12) #define USARTTXC_vect_num 13

    #define

    USARTTXC_vect _VECTOR(13) #define ADC_vect_num 14

    #define

    ADC_vect _VECTOR(14) #define EE_RDY_vect_num 15

    #define

    EE_RDY_vect _VECTOR(15) #define ANA_COMP_vect_num 16

    #define

    ANA_COMP_vect _VECTOR(16) #define TWI_vect_num 17

    #define

    TWI_vect _VECTOR(17) #define INT2_vect_num 18

    #define

    INT2_vect _VECTOR(18) #define TIMER0_COMP_vect_num 19

    #define

    TIMER0_COMP_vect _VECTOR(19) #define SPM_RDY_vect_num 20

    #define

    SPM_RDY_vect _VECTOR(20)

    #define _VECTOR_SIZE 4

    #define _VECTORS_SIZE (21 * _VECTOR_SIZE)

    =========================结束==================================

    就以外部中断向量0为例吧。INT0_vect就是中断向量的名称或者写法了。加粗是我处理的,加粗的就是中断向量名称。

    比如,写外部中断0的中断处理函数,就必须这么写:

    ISR(INT0_vect)

    {

    //

    }

    再比如串口接收完成中断函数,就必须这么写:

    ISR(USARTRXC_vect)

    {

    //

    }

    要注意,是USARTRXC_vect,而不是USART_RXC_vect!!!

    4.中断函数的设计着力点

    使用C语言编写的处理代码,主要考虑中断功能上的处理,而不需要考虑现场保护和恢复等问题。编译器会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场。但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。

    5.C 语言编写ISR的原则

    两个字:高效。

    更具体的,体现为:

    1.代码尽量简短,中断服务强调的是一个“快”字。(中断处理很“快”,是使用中断而不是查询的重要原因)

    2.避免在中断内使用函数调用。虽然

    GCC-AVR允许在中断里调用其它函数,但为了避免递归调用的问题,此函数必须为中断服务独家专用。如果非要调用,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。

    3.避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。

    展开全文
  • 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)...
  • C语言函数调用与中断处理

    万次阅读 2018-08-16 19:50:05
    C语言函数调用就好比,你在一个村庄,这个村庄共有100户人家,你就是CPU,100户人家就是100个函数。 你去串门,就是去执行一个函数,你每次只能串一户人家,进户出户就好比进栈出栈,你平时的任务就是不断的去王五...
  • C语言pause()函数:让进程暂停直到信号出现 头文件: #include 定义函数: int pause(void); 函数说明:pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断. 返回值:只返回-1. 错误代码:...
  • C语言wait()函数:结束(中断)进程函数(常用) 头文件: #include <sys> #include 定义函数: pid_t wait (int * status); 函数说明:wait()会暂时停止目前进程的执行, 直到有信号来到或子进程结束. 如果在调用...
  • 本文介绍了单片机中常见的中断函数调用子函数和主函数调用子函数的情况,如果同时调用会出现的问题一节解决方法。
  • GDB实现程序中断

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

    千次阅读 2021-05-18 13:08:54
    什么是中断?首先,中断分硬件中断和软件中断两种。中断为计算机的硬件设备和软件"部件"提供了一种相互交流的途径,这就是它的作用。那么,都有哪些中断呢?它们又是怎样实现这种交流的呢?PC机中的CPU通常都是Intel ...
  • 利用中断技术可使与外设并行工作处理事务速度比较快而被普遍用于计算机监控...中断服务函数这种函数要类型在有的编译系统中所有说明为的寄存器都可以作中断服务函数的参数除外中断服务函数能自动保存的值当中断服务函数...
  • 51在上电后,PSW的RS两个位默认为0,也即51默认使用工作寄存器组BANK 0,在默认状态下,对于普通的C语言函数,其传参、申请局部变量、导出函数的返回值等功能,keil将其翻译成汇编以后,肯定要使用R0~R7;...
  • C语言常用函数总结

    千次阅读 2018-12-22 08:19:52
    一 进程相关函数 1 exit、_exit和return   exit(0):正常运行程序并退出程序;exit(1):非正常运行导致退出程序;return:返回函数。   return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,...
  • c语言定义函数和声明函数 C语言中用户定义函数的类型 (Type of User-defined Functions in C) There can be 4 different types of user-defined functions, they are: 可以有4种不同类型的用户定义函数,它们是: ...
  • 汇编语言 c语言采用interrupt加序号,序号对应中断向量地址 interrupt 0 外部中断0 interrupt 1 T0中断 interrupt 2 外部中断1 interrupt 3 T1中断 interrupt 4 串口中断
  • 简单的对malloc函数的用法和与其配套的free函数进行讲解,新手也能一看就明白 ​malloc的作用是开辟一个空间来供你使用,其返回值是void*类型(可以简单理解为一个没人知道他是什么类型的指针)
  • 定时器中断函数的使用

    千次阅读 2021-05-19 18:41:36
    1.定时器与延时的区别大家可能会觉得我们用延时函数照样可以实现上一讲代码的实验现象,但是定时器与延时的概念不同,延时函数需要占用CPU的使用权,正在延时的时候其他任务没有CPU的使用权就会拖慢执行效率。...
  • 我自己定义了一个打印print函数 ,在主程序中如果把这个print函数放在其他函数前执行了 程序直接就运行结束了 不执行在他后面的程序 。有人能看看这是什么原因吗?
  • PICC可以实现C语言的中断服务程序。中断服务程序有一个特殊的定义方法:voidinterruptISR(void);...中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC在最后进行代码连...
  • c语言编写51单片机中断程序,执行过程是怎样的?

    千次阅读 多人点赞 2017-10-11 09:53:00
    Q:c语言编写51单片机中断程序,执行过程是怎样的?   例如程序:#include&lt;reg52.h&gt; void main(void) { EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=1; //选择负跳变来触发外中断 P0=0...
  • #include"csapp.h"/*编写sleep的包装函数,snooze函数,返回一个进程实际休眠了多少时间*/unsignedintsnooze(unsignedintsecs)//secs为总休眠时间{unsignedinttimeLeft;unsignedinttimeAll=secs;timeLeft=sleep(time...
  • 钩子函数也叫回调函数,是通过函数指针来实现的,那我们来看看什么是函数指针。 首先看看以下例子: int *p; int a,b; 我们可以让指针p先后指向a, b,这样,p就先后代表了不同变量的地址 p = &a;...
  • C语言函数调用流程

    千次阅读 2019-12-27 21:51:47
    调用函数所用信息 函数的返回地址 函数的参数 临时变量 保存的上下文:包括在函数调用前后需要保持不变的寄存器 //函数从左到右,还是从右向左压栈 int fun(int a,int b ) { int t_a = a; int t_b = b; return ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,114
精华内容 24,845
关键字:

c语言中断函数

友情链接: (源程序).rar