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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

采用回調函數的方式優化嵌入式系統命令解析

玩轉單片機與嵌入式 ? 來源:玩轉單片機與嵌入式 ? 2023-11-14 09:19 ? 次閱讀

嵌入式系統開發中,命令解析是一個關鍵的環節,它負責解析用戶或其他系統發送的命令,并執行相應的操作。傳統的命令解析方法通常采用switch case語句,這種方式雖然經典,但在功能擴展和代碼維護上存在一些不足。下面小編為大家推薦一種更為靈活和模塊化的命令解析方法,即通過回調函數實現功能碼的動態綁定,提高系統的可維護性和可擴展性。

傳統方法的缺陷

在傳統的命令解析中,如下圖所示的協議內容:

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

為了解析協議中的命令碼,我們經常看到類似于下面的switch 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;  
    }
}

這樣的寫法存在一個明顯的問題,即在增加新的功能碼時需要修改poll_task函數,不夠靈活。而且,若要統計功能碼的個數,只能手動數,不夠智能


創新的回調函數應用

為了解決傳統方法的問題,我們可以使用回調函數和功能碼綁定的方式,使代碼更為模塊化和清晰。具體實現如下:

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},
    // 添加新的功能碼和回調函數只需在這里新增
};


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

這種方式的優點在于提供了一個模板,新增功能碼只需在結構體中添加命令和對應的回調函數,而不需要修改主運行邏輯,大大降低了代碼的可維護性。

進一步優化

為了進一步優化系統的命令解析,我們可以考慮將命令解析放入隊列,并結合回調函數的方式進行解析。這樣的設計使得命令解析模塊更加通用,即使在更換單片機型號時,也能快速移植并保持代碼的穩定運行。

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


    // 調用命令解析函數
    poll_task(cmd, msg, len);
}

通過這樣的設計,我們實現了一個靈活、模塊化且可擴展的命令解析系統。這種模塊化的設計不僅提高了系統的可維護性,還為未來的功能擴展提供了更大的空間。

總體而言,采用回調函數的方式優化嵌入式系統的命令解析是一個巧妙的設計選擇,它不僅提高了代碼的可讀性和可維護性,還使系統更具擴展性。

在嵌入式系統開發中,我們應當注重采用更先進的設計思路,不斷提升系統的性能和可維護性。

小編計劃專門撰寫系列文章,講解如何提升系統的性能和可維護性。歡迎持續關注。

關于什么是“回調函數”,小編計劃再專門撰寫一篇文章進行詳細的介紹,歡迎持續關注。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3662

    瀏覽量

    130632
  • 函數
    +關注

    關注

    3

    文章

    4365

    瀏覽量

    63869
  • 命令
    +關注

    關注

    5

    文章

    722

    瀏覽量

    22632
  • 回調函數
    +關注

    關注

    0

    文章

    88

    瀏覽量

    11792

原文標題:優化嵌入式系統命令解析:回調函數的巧妙應用

文章出處:【微信號:玩轉單片機與嵌入式,微信公眾號:玩轉單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式Linux命令總結

    嵌入式Linux命令總結
    發表于 09-19 16:30 ?749次閱讀

    嵌入式系統中的代碼優化與壓縮技術

    與續航能力。 二、代碼優化策略 算法優化:這是最基礎且有效的優化方式。在圖像處理的嵌入式應用中,傳統算法可能需要大量的計算資源和時間。
    發表于 02-26 15:00

    調函數的作用是什么?怎么使用回調函數

    什么是js回調函數?回調函數的作用是什么?怎么使用回調函數
    發表于 11-01 06:10

    嵌入式系統內存優化使用

    嵌入式系統功能的提高,占用了較大內存空間,繼而時常出現運行無響應。基于用戶方面看,由于系統內存問題影響運行,針對系統內存與進程應用狀態研究,可以調整
    發表于 11-04 06:23

    如何對嵌入式系統進行優化

    系統為控制、監視或輔助設備、機器或用于工廠運作的設備。與個人計算機這樣的通用計算機系統不同,嵌入式系統通常執行的是帶有特定要求的預先定義的任務。由于
    發表于 12-21 06:24

    怎樣去寫回調函數呢?怎樣去使用回調函數

    調函數的作用是什么?單片機怎么用回調函數在不同文件之間傳遞數據呢?怎樣去寫回調
    發表于 02-23 07:40

    嵌入式機器視覺系統優化研究

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

    如何將嵌入式的代碼優化

    嵌入式代碼優化,除了最基本的函數實現細節算法優化外,還有一些細節的處理。
    發表于 09-25 09:34 ?1517次閱讀

    嵌入式系統的全面解析

     嵌入式系統的應用十分廣泛,因此越來越多的人學習嵌入式系統。由此,在學習嵌入式系統之前,我們應當
    發表于 01-03 17:47 ?3400次閱讀

    嵌入式linux+io+優化,嵌入式Linux系統內存優化使用方法研究

    優化進而確保響應運行。并且經過實踐證明,嵌入式系統內存優化使用,能夠提升系統空間5%內存,確保系統
    發表于 11-01 16:31 ?10次下載
    <b class='flag-5'>嵌入式</b>linux+io+<b class='flag-5'>優化</b>,<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>系統</b>內存<b class='flag-5'>優化</b>使用方法研究

    嵌入式Linux開發工具5

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

    嵌入式設計課程總結5

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

    嵌入式開發軟件中回調函數的使用

    嵌入式開發軟件中回調函數是經常接觸的一種軟件設計方法,像我們的事件處理機制基本上都會使用到回調函數。
    的頭像 發表于 04-29 08:57 ?2484次閱讀

    嵌入式函數調注冊機制的實現

    嵌入式函數調注冊機制是一種常用的解耦技術,它通過在應用程序中注冊回調函數方式來實現模塊之間的
    的頭像 發表于 04-13 15:52 ?1613次閱讀

    嵌入式open函數的使用

    嵌入式系統是指嵌入到其他設備或系統中,用于控制和管理硬件資源的計算機系統。在嵌入式
    的頭像 發表于 01-04 15:51 ?920次閱讀
    主站蜘蛛池模板: 深夜桃色影院 | 色综合九九 | 欧美香蕉视频 | 久久久国产乱子伦精品 | 全国男人的天堂天堂网 | 有码日韩 | 欧美黄色片免费 | 四虎永久在线精品网址 | 色www视频永久免费 色www视频永久免费软件 | 激情网五月 | 5g影院天天| 午夜免费福利影院 | 性色视频免费 | 中文字幕三级久久久久久 | 一级视频免费观看 | 天堂视频在线视频观看2018 | 婷婷丁香色综合狠狠色 | 午夜欧美精品久久久久久久久 | 欧美特级黄| 久久久精品波多野结衣 | 永久免费的拍拍拍网站 | 在线观看播放视频www | 五月婷婷丁香色 | 啪啪影城| 午夜色网 | 久久涩精品| 2022国产情侣真实露脸在线 | 色五月激情小说 | 四虎永久免费地址在线网站 | sis色中色 | 亚洲aaaa级特黄毛片 | 久久青青草原精品老司机 | 69日本人xxxx16-18 | 在线视频亚洲一区 | 五月六月婷婷 | 一区二区三区视频在线观看 | 8050午夜网 | a网站免费| 成年ssswww中国女人 | 天天噜噜日日噜噜久久综合网 | 手机看片自拍自拍自拍 |