我有一个 Linux 设备驱动程序,它使用中断处理程序来完成它的工作。
如何安排每X毫秒调用一次中断处理程序(中断线断开)?
我有一个 Linux 设备驱动程序,它使用中断处理程序来完成它的工作。
如何安排每X毫秒调用一次中断处理程序(中断线断开)?
假设您只是为了调试目的而这样做,直到您修复中断线,您可以尝试在该代码重新启用中断之前在内部调用您的 ISR(减去其上下文保存代码timer_interrupt
)arch/*/kernel/time.c
。如果您需要比滴答声源更慢的速率,则必须添加一些代码以使其仅触发 Y 个滴答声中的一个。
如果在中断上下文中运行 ISR 不是您的目标,并且您只想让下半部分驱动程序代码定期运行,您可以使用计时器 API 而不是黑客攻击timer_interrupt
。在这种情况下,您的 ISR 代码不会在中断上下文中执行。
如果您需要比滴答声源更快的速率,您可能需要使用高分辨率计时器。同样,您实际上不会在中断上下文中执行。
这里有一个很好的介绍 highres timers 和 timer API 。timer_create( )
手册页中有一个示例用户空间计时器。对于内核空间计时器,您需要hrtimer_init()
, 和hrtimer_start()
. 这里有一个示例 hrtimer 。为了让它定期工作,我想您只需在每次触发时重置计时器或使用hrtimer_forward( )
此SE 帖子中的解决方案。