成為一個軟體工程師, C語言裡面的Callback function算是滿值得一學的東西
主要的概念就是: 傳回某個函數的指標,呼叫者即可透過該函數指標直接執行函數…
以下是一個簡單的範例, 可以在一個檔案 e.g: xxx.c 內完成
1. 宣告callback function的prototype(原型)
1 2 3 4 |
typedef struct{ uint8_t time ; void (*bsp_callback)(void); }Display_Info_struct; |
2.宣告該struct的變數 DisplayInfo
1 |
static Display_Info_struct DisplayInfo; |
3.定義會被呼叫的函式
1 2 3 4 |
void showHelloword() { printf("Hello world.\n"); } |
4.定義會使用CallBack Fuction的函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void BSP_SHOW(uint8_t time,void (*callback)(void)) { DisplayInfo.time = time; DisplayInfo.bsp_callback = callback; while(DisplayInfo.time > 0){ --DisplayInfo.time; if(DisplayInfo.time == 0){ //呼叫callback function if(DisplayInfo.bsp_callback) DisplayInfo.bsp_callback(); //清除callback fuction DisplayInfo.bsp_callback = 0; } delay_ms(1000); // 1 second } } |
5.由main執行的呼叫點起始
1 2 3 4 |
void main(){ //顯示10秒的hello word字串 BSP_SHOW( 10, showHelloword); } |
大概就這樣的架構
如果編譯有誤或是其他問題, 再debug一下吧~
非常謝謝提供有用的文章
學習了
哪來的bsp_time??
已修正, 多謝提醒!!