Pointer - Array Of Function Pointers


這邊介紹一個使用 array of function pointers 的實作流程,也可以利用在有限狀態機。

我們模擬一個情境,現在假設我們想依據目前 noise 動態改變觸控螢幕的劃線效果。假設在 noisy 的情況下的情況下我們要用高度反鋸齒 AA_HIGH,在較無 noise 的情況下使用 AA_LOW. (在實際情況可能更多項,在此先舉例兩項)

假設已經有兩個實做好的 function

    void aaHigh(void);
    void aaLow(void);

我們考慮一個列舉以及宣告一個 function pointer array

    enum
    {
        AA_HIGH,
        AA_LOW, 
        AA_ALG_NUM
    };

    typedef void (*alg_func_t)(void);

    alg_func_t aa_funcs[AA_ALG_NUM];

寫一個 inital function 註冊 callback function (或是直接在宣告時初始化也可)

    void init (void)
    {
        aa_funcs[AA_HIGH] = aaHigh;
        aa_funcs[AA_LOW]  = aaLow;
    }

我們可能有一個 function 可以判斷現在所需的演算法

    int getAALevel(void)
    {
        //do somethings
    }

    // getAALevel() 會回傳 AA_HIGH 或 AA_LOW

一個可能的流程如下

   Loop
   {
           //...

           int aa_level = getAALevel();
           (*aa_funcs[aa_level])();

           //...
   }

如果以 FSM 流程而言,可以考慮把列舉狀態,並且實做該狀態所需要的行為,以上述的方法實做。

results matching ""

    No results matching ""