中断函数可以传参吗 中断函数注意点?

中断函数注意点?1. 中断处理函数的返回值和形式参数中断处理函数不能有返回值和形式参数,因为中断处理函数是由硬件(或触发器)调用的,没有程序向其传递参数,也没有程序接收其返回值,其参数通过全局变量传递

中断函数注意点?

1. 中断处理函数的返回值和形式参数

中断处理函数不能有返回值和形式参数,因为中断处理函数是由硬件(或触发器)调用的,没有程序向其传递参数,也没有程序接收其返回值,其参数通过全局变量传递。

但是,请注意,如果要检测的其他函数的全局变量值在中断服务函数中发生更改,则volatile关键字将用于定义全局变量。因为主程序可能会将变量读入寄存器,然后每次只使用寄存器中的变量副本。如果此时不使用volatile关键字,则在中断服务函数中修改变量的操作将被短路。

2. 浮点运算是在中断处理函数中执行的

由于浮点运算通常是由特殊的硬件执行的,因此硬件设备会涉及类似全局变量的内容(如硬件端口或存储在硬件设备中的数据)。如果浮点运算过程中断,其他函数也可能使用浮点运算,这将破坏设备中当前的硬件数据。可以理解,浮点运算通常是不可重入的,因此浮点运算不能用于中断服务函数。

在满足精度要求的前提下,浮点运算可以多次扩展为整数运算。

3. 在中断处理函数中使用printf函数

这个原理类似于在上面的中断服务函数中使用浮点数,因为printf函数使用硬件资源,并且这些资源应该是互斥的(在多线程和多处理中),这使得printf函数不可重入且不能被重入用于中断。

此外,malloc和free等函数使用全局内存分配表,因此它们也是不可重入的,不能在中断中使用。

请注意,许多标准库函数是不可重入的,在中断服务函数中应谨慎使用。

中断服务功能应简短有效。