#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,它...