C語言函數指針數組在ARM中斷中的應用

一、函數指針的聲明與初始化

...

int max_fun(int a, int b);

/*函數指針的聲明,聲明瞭兩個形參都爲int類型,返回值爲int類型的函數指針*/
int (*fp)(int, int);

/*指針初始化*/
fp = max_fun;  //fp = &max_fun 也正確

/*函數指針初始化後的調用*/
fp(a,b);       //(*fp)(a,b);也正確

...

二、函數指針的typedef

typedef void (*irq_func)(int);

//定義一個數組,存放中斷函數指針,其參數類型爲irq_func

irq_func irq_array[32];

三、函數指針數組的使用

/* 註冊中斷函數,將中斷函數以指針形式存放在數組中 */
void register_irq(int irq, irq_func fp)
 {
   irq_array[irq] = fp;
   INTMSK &= ~(1 << irq);   //關閉中斷屏蔽
 }
/* 此處將fp函數傳入數組,由於函數名在表達式會蛻變爲指針,
 * 所以調用register_irq()時第二個參數只需要傳入函數名
 */

register_irq(0, key_eint_irq);

數組元素的使用:irq_array[bit](bit);  將irq_array[bit]替換爲一個函數名更容易理解。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章