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

回調(diào)函數(shù)在命令解析中的應(yīng)用

開(kāi)發(fā) 前端
這篇文章主要講解回調(diào)函數(shù)在命令解析中的應(yīng)用,一般命令中都會(huì)有功能碼,用于區(qū)分這條命令到底執(zhí)行的什么動(dòng)作,命令字后面的數(shù)據(jù)的意義。在這種場(chǎng)景中,使用回調(diào)函數(shù)是一個(gè)不錯(cuò)的選擇。

回調(diào)函數(shù)

關(guān)于回調(diào)函數(shù),在之前的文章《回調(diào)函數(shù)》已經(jīng)詳解講解過(guò)了,這個(gè)文章不再講解,不太懂的同學(xué)請(qǐng)看之前的文章《回調(diào)函數(shù)》。在之前講解回調(diào)函數(shù)中就使用串口作為示例,使用回調(diào)函數(shù)可以方便封裝通訊庫(kù),芯片/模塊廠家的SDK和部分開(kāi)源庫(kù)經(jīng)常這樣做,這樣可以實(shí)現(xiàn)模塊間的解耦,模塊化編程。

這篇文章主要講解回調(diào)函數(shù)在命令解析中的應(yīng)用,一般命令中都會(huì)有功能碼,用于區(qū)分這條命令到底執(zhí)行的什么動(dòng)作,命令字后面的數(shù)據(jù)的意義。在這種場(chǎng)景中,使用回調(diào)函數(shù)是一個(gè)不錯(cuò)的選擇。

經(jīng)典寫(xiě)法

在命令解析中,經(jīng)典的寫(xiě)法使用switch case語(yǔ)句。這種寫(xiě)法很經(jīng)典,也很基礎(chǔ),即使是剛學(xué)C語(yǔ)言的小白也能看懂。

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;
}
}

他的缺點(diǎn)是,如果在增加一個(gè)功能碼需要修改poll_task函數(shù),增加case語(yǔ)句。如果要統(tǒng)計(jì)功能碼的個(gè)數(shù),只能手動(dòng)數(shù)。

使用回調(diào)函數(shù)和功能碼綁定的方式會(huì)更加方便一些,結(jié)構(gòu)更加清晰。

回調(diào)函數(shù)

功能碼和回調(diào)函數(shù)綁定方式

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);
}
}
}
}

這種方式優(yōu)點(diǎn)是:提供了一個(gè)“模板”,加入我們?cè)黾右粋€(gè)功能碼,我們只需要在結(jié)構(gòu)體中新增命令和回調(diào)函數(shù)即可,主運(yùn)行邏輯不需要去修改,大大降低代碼的可維護(hù)性。

比起經(jīng)典的方法,將功能碼和回調(diào)函數(shù)綁定的方式,代碼更模塊化,起到代碼結(jié)構(gòu)將解耦的目的,由于增加一個(gè)功能碼主邏輯沒(méi)有修改,這樣就不會(huì)影響到其他功能碼執(zhí)行函數(shù)。

更進(jìn)一步,將命令解析放入一個(gè)隊(duì)列,再用這種方法解析命令,這樣就能封裝成一個(gè)通用的模塊,即使更換單片機(jī)型號(hào),也能很快的移植過(guò)去,并且保證代碼穩(wěn)定運(yùn)行。

責(zé)任編輯:姜華 來(lái)源: 知曉編程
相關(guān)推薦

2021-01-14 07:52:24

JavaScript回調(diào)函數(shù)

2012-02-01 10:33:59

Java

2009-07-31 16:25:29

C#回調(diào)函數(shù)API應(yīng)用

2011-06-15 11:05:14

C語(yǔ)言回調(diào)函數(shù)

2024-11-25 07:00:00

箭頭函數(shù)JavaScriptReact

2011-05-20 17:59:06

回調(diào)函數(shù)

2015-10-26 09:25:42

2023-11-10 16:31:31

2019-11-05 10:03:08

callback回調(diào)函數(shù)javascript

2022-04-12 08:30:52

回調(diào)函數(shù)代碼調(diào)試

2011-07-25 14:32:40

Cocoa 框架 函數(shù)

2009-08-12 10:11:18

C# 回調(diào)函數(shù)

2011-05-20 17:19:25

回調(diào)函數(shù)

2010-03-15 10:24:20

Python函數(shù)變量

2009-08-19 17:10:09

C#回調(diào)函數(shù)

2009-11-04 11:32:20

VB.NET回調(diào)函數(shù)

2010-02-04 16:07:39

C++回調(diào)函數(shù)

2023-04-04 08:38:27

命令Git倉(cāng)庫(kù)

2017-10-17 16:23:58

函數(shù)式編程ReduxReact

2010-07-16 16:23:23

Perl文件系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美黄在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产中文字幕在线 | 久久9精品 | 美女黄网站视频免费 | 亚洲视频一区二区三区 | 国产乱码久久久久久 | 日日网| 在线中文字幕亚洲 | 激情毛片 | 黄视频网址| 色欧美综合 | 国产精品久久久久久久久久三级 | 欧美日韩专区 | 亚洲精品久久久久久一区二区 | 成人毛片视频免费 | av午夜激情 | 国产午夜视频 | 亚洲国产成人精品女人久久久 | 亚洲精品久久 | 青青草华人在线视频 | 欧美日韩国产传媒 | 网站一区二区三区 | 亚洲国产日本 | 欧美aaaaa | 亚洲精品久久久一区二区三区 | 久久久性色精品国产免费观看 | 久久久国产精品一区 | 欧美精品乱码久久久久久按摩 | 情侣av| 在线资源视频 | 黄色免费网址大全 | 亚洲精品一| 久久亚洲国产精品 | 欧美videosex性极品hd | 操操操操操 | 亚洲精品一区在线观看 | wwwxx在线观看| 毛片入口 | 日韩中文字幕在线视频 | 精品产国自在拍 |