2013-04-24 138 views
1

我有一個Linux設備驅動程序,它使用中斷處理程序來完成它的工作。調度中斷處理程序

我該如何安排中斷處理程序每​​X毫秒(中斷線壞了)被調用?

回答

2

假定你,直到你解決斷線只是這樣做了調試的目的,你可以嘗試調用你的ISR(減去其上下文保存代碼)內timer_interruptarch/*/kernel/time.c代碼重新啓用中斷之前。如果您需要比滴答來源更慢的速率,您將不得不添加一些代碼,以使其僅觸發Y滴答中的一個。

如果在中斷上下文中運行ISR並不是您的目標,而您只是希望獲得下半部分的驅動程序代碼以便定期運行,則可以使用定時器API而不是黑客行爲timer_interrupt。在這種情況下,您的ISR代碼將不會在中斷環境中執行。

如果您需要比tick來源更快的速率,您可能需要使用highres計時器。這裏再一次,你將不會在中斷環境中執行。

here有很好的介紹highres定時器和定時器API。 timer_create() man page中有一個示例用戶空間計時器。對於內核空間計時器,您需要hrtimer_init()hrtimer_start()。有一個例子hrtimer here。爲了讓這個工作週期性地工作,我想你會在每次觸發時重置定時器,或者在這個SE post中使用hrtimer_forward()解決方案。

+0

如何使用計時器API來計劃每1毫秒運行ISR(我假設你指的是在'timer_list'上調用'add_timer()')?這似乎只給你一個單一的調用。 – 2013-04-24 18:36:29

+1

@IsaacKleinman:編輯我的答案,試圖回答你的評論 – 2013-04-24 19:27:11

相關問題