在中断处理函数里面调用 disable_irq
时间: 2023-06-20 16:04:35 浏览: 162
在中断处理函数中调用 disable_irq() 函数是不推荐的。因为 disable_irq() 函数会禁用整个中断线,不仅会关闭当前发生中断的设备中断,还会关闭其他设备的中断。这可能会导致系统出现严重问题,比如可能会导致其他设备的中断被一直阻塞,甚至导致系统死机。
通常情况下,中断处理函数应该只处理当前设备的中断,并尽快退出中断处理函数,以便其他设备的中断可以得到及时处理。如果确实需要禁用某个中断线,可以在中断处理函数之外的地方调用 disable_irq() 函数。
相关问题
Linux 里面在中断里面调用 disable_irq 会发生什么?
在 Linux 中,`disable_irq()` 函数用于禁用指定中断线路。当调用 `disable_irq()` 函数时,内核将禁用指定中断线路,这意味着当中断信号到达时,硬件将不会触发中断处理程序。这可以防止在处理中断时出现意外的中断,从而确保系统的稳定性。
在调用 `disable_irq()` 函数时,内核会执行以下操作:
1. 关闭中断
2. 禁用指定中断线路
3. 如果有等待中断的进程,则设置进程状态为等待状态,等待中断信号的到来
需要注意的是,禁用中断会影响系统的性能,因为它会阻止中断处理程序的执行。因此,应该尽可能地减少禁用中断的使用,并且只在必要时才使用。
__disable_irq();
__disable_irq(); 是一个用于禁用中断的函数或宏。在嵌入式系统中,中断是一种机制,允许外部事件或优先级较高的任务中断正在执行的程序。通过禁用中断,可以阻止其他中断干扰当前的程序执行,从而确保某些关键代码的原子性和确定性。
__disable_irq(); 函数或宏的具体实现会根据所使用的嵌入式系统和编译器而有所不同。它可能会关闭所有中断,或者只是禁用特定的中断源。一旦调用了__disable_irq();,中断将被禁用,直到调用了相应的__enable_irq(); 函数或宏来重新启用中断。
需要注意的是,在禁用中断期间,系统将无法响应其他中断请求,包括时钟中断和外部设备的中断。因此,在使用__disable_irq(); 和__enable_irq(); 函数或宏时,需要谨慎处理,确保不会导致系统功能异常或死锁等问题。
阅读全文