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 流程而言,可以考慮把列舉狀態,並且實做該狀態所需要的行為,以上述的方法實做。