網路城邦
上一篇 回創作列表 下一篇   字體:
C語言中function table要怎麼寫?
2008/10/16 14:53:03瀏覽8707|回應0|推薦0

C語言中function table要怎麼寫?

 

char Func1(int a) { return a>5 ? 10 : 20; }

char Func2(int a) { return a<8 ? 20 : 30; }

char (*func_x[2])(int arg) = {Func1, Func2};

//這行的意思是說,宣告有兩個內容陣列,而該內容的型態是函數,該函數的型態是char* func(int arg);

void main(void)

{

   char result;

   result = (*func_x[1])(5);

}

    上述程式會執行Func2,因為(arg=5)<8,所以result=20。至於其他型別的函式,依樣畫葫蘆就可以了。

    至於該如何應用呢?例如有5個按鍵,就可以做出5個內容的陣列,按下1號鍵時產生數字0……5號鍵是數字4,此時就可以使用這個function table,這樣就可以免去5if…else,如果有20個按鍵,就少了20個,很容易維護。

    如果今天ram不夠大,例如是8051,就要把該陣列放在flash內了,不過要注意flash存取速度會不會很慢,以IAR為例:

char (* const func_x[2])(int arg) = {Func1, Func2};

    如果是KEIL C呢?

char (* const code func_x[2])(int arg) = {Func1, Func2};

注意code的關鍵字是51系列特有的。

    當作出function table的執行時,例如8051,會有overlay memory的錯誤產生,詳細原因請參考前一篇探討什麼是overlay memory的文章,該文章已經寫出keil c的解決方法,但如果是IAR怎麼辦?只要在程式碼的開頭加上:

    #pragma overlay=off

    該程式碼的記憶體就不會使用共用的模式來處理,所以ram的使用量就要大增了,至於要取消掉overlay?或是使用reentrant?就要好好衡量了。

    如果都不處理,當作沒看到也行,那就要求老天保佑了,就是compiler沒有疊到不該疊的地方了。

 

( 心情隨筆心情日記 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=cchahacaptain&aid=2303219