int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id) ;
-
irq:表示申請的中斷號。
-
handler:表示中斷服務例程。
-
thread_fn:中斷線程化,此處傳遞的是NULL。NULL表示沒有中斷線程化。
在 Linux 中,中斷具有最高的優先級。不論在任何時刻,只要產生中斷事件,內核將立即執行相應的中斷
處理程序,等到所有掛起的中斷和軟中斷處理完畢后才能執行正常的任務,因此有可能造成實時任務得不
到及時的處理。中斷線程化之后,中斷將作為內核線程運行而且被賦予不同的實時優先級,實時任務可以
有比中斷線程更高的優先級。這樣,具有最高優先級的實時任務就能得到優先處理,即使在嚴重負載下仍
有實時性保證。but,並不是所有的中斷都可以被線程化,比如時鍾中斷,主要用來維護系統時間以及定時器
等,其中定時器是操作系統的脈搏,一旦被線程化,就有可能被掛起,這樣后果將不堪設想,所以不應當
被線程化。 -
irqflags:表示中斷標志位。
-
devname:表示請求中斷的設備的名稱。
-
dev_id: 對應於request_irq()函數中所傳遞的第五個參數,可取任意值,但必須唯一能夠代表發出中斷請求的設備,通常取描述該設備的結構體。 共享中斷時所用。
status = request_threaded_irq(cdfinger->irq, (irq_handler_t)cdfinger_interrupt_handler_up, NULL, IRQF_TRIGGER_RISING | IRQF_ONESHOT , "cdfinger-irq", cdfinger);