在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

采用回調(diào)函數(shù)的方式優(yōu)化嵌入式系統(tǒng)命令解析

玩轉(zhuǎn)單片機(jī)與嵌入式 ? 來源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 2023-11-14 09:19 ? 次閱讀

嵌入式系統(tǒng)開發(fā)中,命令解析是一個(gè)關(guān)鍵的環(huán)節(jié),它負(fù)責(zé)解析用戶或其他系統(tǒng)發(fā)送的命令,并執(zhí)行相應(yīng)的操作。傳統(tǒng)的命令解析方法通常采用switch case語句,這種方式雖然經(jīng)典,但在功能擴(kuò)展和代碼維護(hù)上存在一些不足。下面小編為大家推薦一種更為靈活和模塊化的命令解析方法,即通過回調(diào)函數(shù)實(shí)現(xiàn)功能碼的動(dòng)態(tài)綁定,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。

傳統(tǒng)方法的缺陷

在傳統(tǒng)的命令解析中,如下圖所示的協(xié)議內(nèi)容:

83c05b58-828b-11ee-939d-92fbcf53809c.png

為了解析協(xié)議中的命令碼,我們經(jīng)??吹筋愃朴谙旅娴膕witch case語句:

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

這樣的寫法存在一個(gè)明顯的問題,即在增加新的功能碼時(shí)需要修改poll_task函數(shù),不夠靈活。而且,若要統(tǒng)計(jì)功能碼的個(gè)數(shù),只能手動(dòng)數(shù),不夠智能


創(chuàng)新的回調(diào)函數(shù)應(yīng)用

為了解決傳統(tǒng)方法的問題,我們可以使用回調(diào)函數(shù)和功能碼綁定的方式,使代碼更為模塊化和清晰。具體實(shí)現(xiàn)如下:

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_callback4},
    // 添加新的功能碼和回調(diào)函數(shù)只需在這里新增
};


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_func)
            {
                // 處理邏輯
                callback_list[cmd_index].callback_func(cmd, msg, len);
            }
        }
    }
}

這種方式的優(yōu)點(diǎn)在于提供了一個(gè)模板,新增功能碼只需在結(jié)構(gòu)體中添加命令和對(duì)應(yīng)的回調(diào)函數(shù),而不需要修改主運(yùn)行邏輯,大大降低了代碼的可維護(hù)性。

進(jìn)一步優(yōu)化

為了進(jìn)一步優(yōu)化系統(tǒng)的命令解析,我們可以考慮將命令解析放入隊(duì)列,并結(jié)合回調(diào)函數(shù)的方式進(jìn)行解析。這樣的設(shè)計(jì)使得命令解析模塊更加通用,即使在更換單片機(jī)型號(hào)時(shí),也能快速移植并保持代碼的穩(wěn)定運(yùn)行。

// 將命令解析放入隊(duì)列的偽代碼
void command_queue_handler(void)
{
    // 從隊(duì)列中獲取命令
    rt_uint8_t cmd = get_command_from_queue();
    rt_uint8_t msg[MAX_MESSAGE_SIZE];
    rt_uint8_t len = get_message_length();


    // 調(diào)用命令解析函數(shù)
    poll_task(cmd, msg, len);
}

通過這樣的設(shè)計(jì),我們實(shí)現(xiàn)了一個(gè)靈活、模塊化且可擴(kuò)展的命令解析系統(tǒng)。這種模塊化的設(shè)計(jì)不僅提高了系統(tǒng)的可維護(hù)性,還為未來的功能擴(kuò)展提供了更大的空間。

總體而言,采用回調(diào)函數(shù)的方式優(yōu)化嵌入式系統(tǒng)的命令解析是一個(gè)巧妙的設(shè)計(jì)選擇,它不僅提高了代碼的可讀性和可維護(hù)性,還使系統(tǒng)更具擴(kuò)展性。

在嵌入式系統(tǒng)開發(fā)中,我們應(yīng)當(dāng)注重采用更先進(jìn)的設(shè)計(jì)思路,不斷提升系統(tǒng)的性能和可維護(hù)性。

小編計(jì)劃專門撰寫系列文章,講解如何提升系統(tǒng)的性能和可維護(hù)性。歡迎持續(xù)關(guān)注。

關(guān)于什么是“回調(diào)函數(shù)”,小編計(jì)劃再專門撰寫一篇文章進(jìn)行詳細(xì)的介紹,歡迎持續(xù)關(guān)注。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3670

    瀏覽量

    131031
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4374

    瀏覽量

    64393
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    733

    瀏覽量

    22744
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    11843

原文標(biāo)題:優(yōu)化嵌入式系統(tǒng)命令解析:回調(diào)函數(shù)的巧妙應(yīng)用

文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式,微信公眾號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式Linux命令總結(jié)

    嵌入式Linux命令總結(jié)
    發(fā)表于 09-19 16:30 ?828次閱讀

    嵌入式系統(tǒng)中的代碼優(yōu)化與壓縮技術(shù)

    與續(xù)航能力。 二、代碼優(yōu)化策略 算法優(yōu)化:這是最基礎(chǔ)且有效的優(yōu)化方式。在圖像處理的嵌入式應(yīng)用中,傳統(tǒng)算法可能需要大量的計(jì)算資源和時(shí)間。
    發(fā)表于 02-26 15:00

    調(diào)函數(shù)的作用是什么?怎么使用回調(diào)函數(shù)

    什么是js回調(diào)函數(shù)?回調(diào)函數(shù)的作用是什么?怎么使用回調(diào)函數(shù)
    發(fā)表于 11-01 06:10

    嵌入式系統(tǒng)內(nèi)存優(yōu)化使用

    嵌入式系統(tǒng)功能的提高,占用了較大內(nèi)存空間,繼而時(shí)常出現(xiàn)運(yùn)行無響應(yīng)?;谟脩舴矫婵矗捎?b class='flag-5'>系統(tǒng)內(nèi)存問題影響運(yùn)行,針對(duì)系統(tǒng)內(nèi)存與進(jìn)程應(yīng)用狀態(tài)研究,可以調(diào)整
    發(fā)表于 11-04 06:23

    如何對(duì)嵌入式系統(tǒng)進(jìn)行優(yōu)化

    系統(tǒng)為控制、監(jiān)視或輔助設(shè)備、機(jī)器或用于工廠運(yùn)作的設(shè)備。與個(gè)人計(jì)算機(jī)這樣的通用計(jì)算機(jī)系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。由于
    發(fā)表于 12-21 06:24

    怎樣去寫回調(diào)函數(shù)呢?怎樣去使用回調(diào)函數(shù)

    調(diào)函數(shù)的作用是什么?單片機(jī)怎么用回調(diào)函數(shù)在不同文件之間傳遞數(shù)據(jù)呢?怎樣去寫回調(diào)
    發(fā)表于 02-23 07:40

    嵌入式機(jī)器視覺系統(tǒng)優(yōu)化研究

    介紹了基于ARM+DSP架構(gòu)的嵌入式機(jī)器視覺系統(tǒng)的特性,分析了制約嵌入式機(jī)器視覺系統(tǒng)性能的因素。從操作系統(tǒng)和應(yīng)用程序方面,討論了
    發(fā)表于 08-13 17:29 ?45次下載
    <b class='flag-5'>嵌入式</b>機(jī)器視覺<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>優(yōu)化</b>研究

    如何將嵌入式的代碼優(yōu)化

    嵌入式代碼優(yōu)化,除了最基本的函數(shù)實(shí)現(xiàn)細(xì)節(jié)算法優(yōu)化外,還有一些細(xì)節(jié)的處理。
    發(fā)表于 09-25 09:34 ?1566次閱讀

    嵌入式系統(tǒng)的全面解析

     嵌入式系統(tǒng)的應(yīng)用十分廣泛,因此越來越多的人學(xué)習(xí)嵌入式系統(tǒng)。由此,在學(xué)習(xí)嵌入式系統(tǒng)之前,我們應(yīng)當(dāng)
    發(fā)表于 01-03 17:47 ?3450次閱讀

    嵌入式linux+io+優(yōu)化,嵌入式Linux系統(tǒng)內(nèi)存優(yōu)化使用方法研究

    優(yōu)化進(jìn)而確保響應(yīng)運(yùn)行。并且經(jīng)過實(shí)踐證明,嵌入式系統(tǒng)內(nèi)存優(yōu)化使用,能夠提升系統(tǒng)空間5%內(nèi)存,確保系統(tǒng)
    發(fā)表于 11-01 16:31 ?10次下載
    <b class='flag-5'>嵌入式</b>linux+io+<b class='flag-5'>優(yōu)化</b>,<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>系統(tǒng)</b>內(nèi)存<b class='flag-5'>優(yōu)化</b>使用方法研究

    嵌入式Linux開發(fā)工具5

    嵌入式Linux開發(fā)工具——shell編程 (腳本:批處理)Linux系統(tǒng)運(yùn)維工程師(嵌入式開發(fā)–系統(tǒng)移植)shell:1、命令
    發(fā)表于 11-02 12:06 ?3次下載
    <b class='flag-5'>嵌入式</b>Linux開發(fā)工具5

    嵌入式設(shè)計(jì)課程總結(jié)5

    系統(tǒng)運(yùn)維工程師(嵌入式系統(tǒng)開發(fā)–系統(tǒng)移植)shell:1.命令解析器 (將用戶輸入的
    發(fā)表于 11-03 15:36 ?15次下載
    <b class='flag-5'>嵌入式</b>設(shè)計(jì)課程總結(jié)5

    嵌入式開發(fā)軟件中回調(diào)函數(shù)的使用

    嵌入式開發(fā)軟件中回調(diào)函數(shù)是經(jīng)常接觸的一種軟件設(shè)計(jì)方法,像我們的事件處理機(jī)制基本上都會(huì)使用到回調(diào)函數(shù)
    的頭像 發(fā)表于 04-29 08:57 ?2545次閱讀

    嵌入式函數(shù)調(diào)注冊(cè)機(jī)制的實(shí)現(xiàn)

    嵌入式函數(shù)調(diào)注冊(cè)機(jī)制是一種常用的解耦技術(shù),它通過在應(yīng)用程序中注冊(cè)回調(diào)函數(shù)方式來實(shí)現(xiàn)模塊之間的
    的頭像 發(fā)表于 04-13 15:52 ?1740次閱讀

    嵌入式open函數(shù)的使用

    嵌入式系統(tǒng)是指嵌入到其他設(shè)備或系統(tǒng)中,用于控制和管理硬件資源的計(jì)算機(jī)系統(tǒng)。在嵌入式
    的頭像 發(fā)表于 01-04 15:51 ?1034次閱讀
    主站蜘蛛池模板: 色五月激情小说 | 求网址你懂的手机在线观看网站 | 国产黄色a三级三级三级 | 天天摸天天看天天做天天爽 | 11111日本网站 | 资源新版在线天堂 | 在线视频这里只有精品 | 国产精品一区二区三区免费视频 | 1024手机在线看永久免费 | 国产免费久久精品 | 最近2018中文字幕免费视频 | 无内丝袜透明在线播放 | 一级片视频在线 | 久久三级网站 | 91x视频 | 亚洲色图综合网 | 日本一区不卡视频 | 日韩精品视频免费在线观看 | 久久久久久久综合狠狠综合 | 都市激情综合网 | 人人九九精品 | 色多多www网站 | 伊人成人在线 | 黄色成人一级片 | 最新毛片网 | 天天摸天天做 | 69日本人xxxx16-18| 欧美一区二区三区免费高 | 一区二区三 | 国产老师的丝袜在线看 | 好爽毛片一区二区三区四区 | japanese色系tube日本护士 | 色婷婷基地 | 乱子伦xxxx厨房 | 国产视频国产 | 亚洲视频五区 | 成人性色生活片免费看爆迷你毛片 | 天使色| 天天操夜夜操视频 | 日本a级特黄三级三级三级 日本边添边爱边摸边做边爱 | 色偷偷伊人 |