中断服务函数和中断回调函数
时间: 2025-01-01 08:29:23 浏览: 13
### 中断服务函数 (ISR) 和中断回调函数的区别
#### 定义与角色
中断服务程序(ISR),即Interrupt Service Routine,在硬件触发中断时立即执行。ISRs通常由操作系统内核管理并运行于特权模式下,用于快速响应外部设备发出的信号[^1]。
相比之下,中断回调函数则是在更高层次的应用层定义,并通过注册机制告知系统其存在。当中断事件发生后,经过初步处理(一般是由ISR完成),控制权会传递给相应的应用程序级逻辑——也就是这些事先登记过的回调函数来继续后续操作。
#### 执行环境差异
由于ISR直接关联到具体的硬件中断源,因此它们往往具有较高的优先级以及严格的实时性要求;而回调函数更多体现的是业务层面的功能实现,可以容忍一定程度上的延迟,并且能够访问更广泛范围内的资源和服务接口。
#### 使用场景举例
对于嵌入式开发而言,当GPIO引脚检测到电平变化时会产生一个硬件级别的脉冲作为输入信号,此时对应的ISR会被激活用来读取当前状态并向应用报告该事件的发生。随后可能调用某个特定的任务调度器去安排进一步的动作,比如更新LED显示或是记录日志等,这部分工作就交给了预先设定好的回调函数去做。
```c
// C语言中的简单示例展示如何设置定时器溢出后的ISR和用户自定义的回调行为
void setup() {
attachInterrupt(digitalPinToInterrupt(pin), isrFunction, CHANGE); // 设置ISR
}
volatile bool flag = false;
void isrFunction() {
flag = true;
}
void loop() {
if(flag){
callbackFunction(); // 调用回调函数
flag=false;
}
}
```
阅读全文