中斷註冊函式分析總結

2021-06-21 15:59:09 字數 1992 閱讀 3272

#include 。函式原型如下:

int request_irq (unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long frags, const char *device, void *dev_id);

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);

引數說明:

irq----是要申請的硬體中斷號。

handler---

是向系統註冊的中斷處理函式的函式指標,我們需要自己定義這個函式並把函式指標做為引數傳到這裡,中斷發生時,系統會呼叫這個函式,

dev_id

引數將被傳遞給它。

irqflags---

是中斷處理的屬性,若設定了

irqf_disabled

,則表示中斷處理程式是快速處理程式,快速處理程式被呼叫時遮蔽所有中斷,慢速處理程式不遮蔽;若設定了 

irqf_shared

,則表示多個裝置共享中斷

(多個中斷服務程式將註冊到這個中斷號上

),若設定了

irqf_sample_random

,表示對系統熵有貢獻,對系統獲取隨機數有好處。這幾個

flag

是可以通過或的方式同時使用的。

dev_id---

在中斷共享時會用到,一般設定為這個裝置的裝置結構體或者

null

。這個引數一般設為裝置結構體,這樣方便我們把裝置有關資訊傳給該裝置的中斷處理程式,在使用到共享中斷時,該引數必須設定,因為free_irq(unsigned int irq, void *dev_id) 

這個函式中,需要根據這個引數來判斷要釋放共享上的哪個中斷。在共享中斷裡,每個中斷服務程式需要讀取中斷暫存器來判斷是否是自己的中斷,是的則執行相應**,不是的則馬上返回。 其中

irqreturn_t

為乙個型別定義,

typedef irqreturn_t (*irq_handler_t)(int, void *);

在linux-2.6.32.2/include/linux/interrupt.h

中定義的

request_irq()

函式如下:

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)

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 )   

__setup_irq

來完成註冊函式處理,將action註冊到desc[irq]中。

static

int setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)  

while (old);  

shared = 1;  

}。。。

new->irq = irq;

*old_ptr = new;

。。。}  

while(old)迴圈使得old_ptr存放desc->action最後乙個action的位址(即最後乙個action存放nex的位址),且最後乙個action->next的指標指向為空。最後,將要插入的新的action放到連尾。

中斷註冊函式整理

中斷註冊函式整理 archipcint interruptregister obj remoteprocid,obj params.localintid,notifydrivershm isr,ptr obj int32 archipcint interruptregister uint16 pro...

OSTaskCreate()函式分析

int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...

getopt函式分析

函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...