中断函数注意什么 中断入口函数和中断处理函数有什么区别?
中断入口函数和中断处理函数有什么区别?中断输入函数是进入中断地址的输入向量,中断处理函数是响应中断,执行中断程序,输出结果,达到处理突发事件的目的。中断函数注意点?1. 中断处理函数的返回值和形式参数
中断入口函数和中断处理函数有什么区别?
中断输入函数是进入中断地址的输入向量,中断处理函数是响应中断,执行中断程序,输出结果,达到处理突发事件的目的。
中断函数注意点?
1. 中断处理函数的返回值和形式参数
中断处理函数不能有返回值和形式参数,因为中断处理函数是由硬件(或触发器)调用的,没有程序向其传递参数,也没有程序接收其返回值,其参数通过全局变量传递。
但是,请注意,如果要检测的其他函数的全局变量值在中断服务函数中发生更改,则volatile关键字将用于定义全局变量。因为主程序可能会将变量读入寄存器,然后每次只使用寄存器中的变量副本。如果此时不使用volatile关键字,则在中断服务函数中修改变量的操作将被短路。
2. 浮点运算是在中断处理函数中执行的
由于浮点运算通常是由特殊的硬件执行的,因此硬件设备会涉及类似全局变量的内容(如硬件端口或存储在硬件设备中的数据)。如果浮点运算过程中断,其他函数也可能使用浮点运算,这将破坏设备中当前的硬件数据。可以理解,浮点运算通常是不可重入的,因此浮点运算不能用于中断服务函数。
在满足精度要求的前提下,浮点运算可以多次扩展为整数运算。
3. 在中断处理函数中使用printf函数
这个原理类似于在上面的中断服务函数中使用浮点数,因为printf函数使用硬件资源,并且这些资源应该是互斥的(在多线程和多处理中),这使得printf函数不可重入且不能被重入用于中断。
此外,malloc和free等函数使用全局内存分配表,因此它们也是不可重入的,不能在中断中使用。
请注意,许多标准库函数是不可重入的,在中断服务函数中应谨慎使用。
中断服务功能应简短有效。
STM32中断函数?
EXTI0_uqchannel]表示与外部中断线EXTI0对应的中断功能。
以stm32f103vb系列为例,100pin,
通常我们使用的外部中断线对应的IO如下:
PA0、pb0、PC0、pd0、Pe0对应exti0中断;
依此类推
pa15、pb15、PC15、pd15、pe15对应exti5中断。
exti0的相应中断函数为exti0irqchannel]exti1的相应中断函数为exti1irqchannel]exti2的相应中断函数为exti2irqchannel]exti3的相应中断函数为exti3irqchannel]exti4的相应中断函数为exti4exti5-> exti9对应的中断函数是exti9u5Irqhandler
exti10-> exti15对应的中断函数是exti15u10Irqhandler
如果使用哪种类型的中断,初始化哪种类型的中断,然后在中断函数中写入要实现的内容。
注意中断功能不太容易。
网上有很多基本的例子,比如按键程序,闹钟中断,你可以去看看。