我有一个Linux设备驱动程序,它使用中断处理程序来完成它的工作。
如何安排每一个X毫秒(中断行被中断)调用的中断处理程序?
发布于 2013-04-24 17:14:42
假设您只是为了调试的目的,直到您修复中断行,您可以尝试在timer_interrupt中的arch/*/kernel/time.c中调用您的ISR (减去其上下文保存代码),然后再重新启用中断。如果你需要一个比滴答源慢的速度,你就必须添加一些代码来使它只触发Y中的一个。
如果在中断上下文中运行ISR不是您的目标,并且您只想让底层的驱动程序代码定期运行,您可以使用timer API而不是黑客timer_interrupt。在这种情况下,您的ISR代码将不会在中断上下文中执行。
如果您需要一个比滴答源更快的速度,您可能需要使用高精度计时器。在这里,您实际上不会在中断上下文中执行。
有一个很好的介绍高精度定时器和计时器API的这里。在手册页中有一个示例用户空间定时器。对于内核空间定时器,您需要hrtimer_init()和hrtimer_start()。有一个例子: hrtimer 这里。为了使它定期工作,我想每次计时器启动或在这个hrtimer_forward( )中使用硒柱解决方案时,您都会重新设置计时器。
https://stackoverflow.com/questions/16197574
复制相似问题