成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

回調函數在命令解析中的應用

開發 前端
這篇文章主要講解回調函數在命令解析中的應用,一般命令中都會有功能碼,用于區分這條命令到底執行的什么動作,命令字后面的數據的意義。在這種場景中,使用回調函數是一個不錯的選擇。

回調函數

關于回調函數,在之前的文章《回調函數》已經詳解講解過了,這個文章不再講解,不太懂的同學請看之前的文章《回調函數》。在之前講解回調函數中就使用串口作為示例,使用回調函數可以方便封裝通訊庫,芯片/模塊廠家的SDK和部分開源庫經常這樣做,這樣可以實現模塊間的解耦,模塊化編程。

這篇文章主要講解回調函數在命令解析中的應用,一般命令中都會有功能碼,用于區分這條命令到底執行的什么動作,命令字后面的數據的意義。在這種場景中,使用回調函數是一個不錯的選擇。

經典寫法

在命令解析中,經典的寫法使用switch case語句。這種寫法很經典,也很基礎,即使是剛學C語言的小白也能看懂。

void poll_task(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len){
switch (cmd){
case cmd1:
func1();
break;
case cmd2:
func2();
break;
case cmd3:
func3();
break;
case cmd4:
func4();
break;
default:
default_func();
break;
}
}

他的缺點是,如果在增加一個功能碼需要修改poll_task函數,增加case語句。如果要統計功能碼的個數,只能手動數。

使用回調函數和功能碼綁定的方式會更加方便一些,結構更加清晰。

回調函數

功能碼和回調函數綁定方式

typedef struct
{
rt_uint8_t CMD;
rt_uint8_t (*callback_func)(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len);
} _FUNCCALLBACK;

_FUNCCALLBACK callback_list[]=
{
{ cmd1,func_callback1},
{ cmd2,func_callback2},
{ cmd3,func_callback3},
{ cmd4,func_callback41},

...
};
void poll_task(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len){
int cmd_indexmax = sizeof(callback_list) / sizeof(_FUNCCALLBACK);
int cmd_index = 0;

for (cmd_index = 0; cmd_index < cmd_indexmax; cmd_index++)
{
if (callback_list[cmd_index].CMD == cmd)
{
if(callback_list[cmd_index])
{
/* 處理邏輯 */
callback_list[cmd_index].callback_func(cmd,msg,len);
}
}
}
}

這種方式優點是:提供了一個“模板”,加入我們增加一個功能碼,我們只需要在結構體中新增命令和回調函數即可,主運行邏輯不需要去修改,大大降低代碼的可維護性。

比起經典的方法,將功能碼和回調函數綁定的方式,代碼更模塊化,起到代碼結構將解耦的目的,由于增加一個功能碼主邏輯沒有修改,這樣就不會影響到其他功能碼執行函數。

更進一步,將命令解析放入一個隊列,再用這種方法解析命令,這樣就能封裝成一個通用的模塊,即使更換單片機型號,也能很快的移植過去,并且保證代碼穩定運行。

責任編輯:姜華 來源: 知曉編程
相關推薦

2021-01-14 07:52:24

JavaScript回調函數

2012-02-01 10:33:59

Java

2009-07-31 16:25:29

C#回調函數API應用

2011-06-15 11:05:14

C語言回調函數

2024-11-25 07:00:00

箭頭函數JavaScriptReact

2011-05-20 17:59:06

回調函數

2015-10-26 09:25:42

2023-11-10 16:31:31

2009-08-12 10:11:18

C# 回調函數

2011-05-20 17:19:25

回調函數

2019-11-05 10:03:08

callback回調函數javascript

2022-04-12 08:30:52

回調函數代碼調試

2011-07-25 14:32:40

Cocoa 框架 函數

2010-03-15 10:24:20

Python函數變量

2009-08-19 17:10:09

C#回調函數

2009-11-04 11:32:20

VB.NET回調函數

2010-02-04 16:07:39

C++回調函數

2017-10-17 16:23:58

函數式編程ReduxReact

2023-04-04 08:38:27

命令Git倉庫

2023-04-18 08:10:10

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区在线 | 国产精品久久在线 | 日本中文字幕一区 | 黄色一级大片视频 | 伊人网影院 | 熟女毛片 | 精品国产精品一区二区夜夜嗨 | 日韩av成人在线 | 国产一区二区久久久 | 欧美日韩国产精品一区二区 | 欧美电影免费网站 | 欧美一区二区另类 | 免费亚洲婷婷 | 九九导航 | 久久夜夜 | 精品欧美二区 | 免费a国产| 国产黄色免费网站 | 一区二区三区四区免费在线观看 | 91视频进入 | 天堂va在线 | 99精品视频网 | 精品在线一区 | 97超碰站 | 久久久久久国产精品免费免费狐狸 | 成人在线一级片 | 日韩国产欧美一区 | 羞羞视频免费在线观看 | 中文字幕在线电影观看 | 欧洲精品视频一区 | 国产精久久久久久久妇剪断 | 成人免费视频在线观看 | 一级看片 | 老司机精品福利视频 | 国产精品国产成人国产三级 | 日本精品网站 | 国产一区二区在线观看视频 | 久国产视频 | 久久精品手机视频 | 色又黄又爽网站www久久 | 成人在线视频免费播放 |