91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

嵌入式軟件設計模式 好文值得收藏

lucky的記錄與分享 ? 來源:lucky的記錄與分享 ? 作者:lucky的記錄與分享 ? 2022-06-20 09:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文引用自本人公眾號文章:

嵌入式開發(fā)中的兩點編程思想

C語言也很講究設計模式?一文講透

包含如下:

01)C語言和設計模式(繼承、封裝、多態(tài))

02)C語言和設計模式(訪問者模式)

03)C語言和設計模式(狀態(tài)模式)

04)C語言和設計模式(命令模式)

05)C語言和設計模式(解釋器模式)

06)C語言和設計模式(備忘錄模式)

07)C語言和設計模式(觀察者模式)

08)C語言和設計模式(橋接模式)

09)C語言和設計模式(建造者模式)

10)C語言和設計模式(中介者模式)

11)C語言和設計模式(策略模式)

12)C語言和設計模式(適配器模式)

13)C語言和設計模式(裝飾模式)

14)C語言和設計模式(享元模式)

15)C語言和設計模式(代理模式)

16)C語言和設計模式(外觀模式)

17)C語言和設計模式(迭代器模式)

18)C語言和設計模式(抽象工廠模式)

19)C語言和設計模式(責任鏈模式)

20)C語言和設計模式(工廠模式)

21)C語言和設計模式(模板模式)

22)C語言和設計模式(組合模式)

23)C語言和設計模式(原型模式)

24)C語言和設計模式(單件模式)

25)C語言和設計模式(開篇)

-----------------------
01)C語言和設計模式(繼承、封裝、多態(tài))

記得還在我們大學C++第一門課的時候,老師就告訴我們說,C++是一門面向?qū)ο蟮恼Z言。C++有三個最重要的特點,即繼承、封裝、多態(tài)。等到后來隨著編碼的增多和工作經(jīng)驗的積累,我也慢慢明白了面向?qū)ο蟮暮x??墒?,等我工作以后,使用的編程語言更多的是C語言,這時候我又想能不能把C語言變成面向?qū)ο蟮恼Z言呢?等到后來通過思考和實踐,我發(fā)現(xiàn)其實C語言也是可以面向?qū)ο蟮?,也是可以應用設計模式的,關鍵就在于如何實現(xiàn)面向?qū)ο笳Z言的三個重要屬性。
(1)繼承性
typedef struct _parent
{
int data_parent;
}Parent;
typedef struct _Child
{
struct _parent parent;
int data_child;
}Child;
在設計C語言繼承性的時候,我們需要做的就是把基礎數(shù)據(jù)放在繼承的結(jié)構(gòu)的首位置即可。這樣,不管是數(shù)據(jù)的訪問、數(shù)據(jù)的強轉(zhuǎn)、數(shù)據(jù)的訪問都不會有什么問題。
(2)封裝性
struct _Data;
typedef void (*process)(struct _Data* pData);
typedef struct _Data
{
int value;
process pProcess;
}Data;
封裝性的意義在于,函數(shù)和數(shù)據(jù)是綁在一起的,數(shù)據(jù)和數(shù)據(jù)是綁在一起的。這樣,我們就可以通過簡單的一個結(jié)構(gòu)指針訪問到所有的數(shù)據(jù),遍歷所有的函數(shù)。封裝性,這是類擁有的屬性,當然也是數(shù)據(jù)結(jié)構(gòu)體擁有的屬性。
(3)多態(tài)
typedef struct _Play
{
void* pData;
void (*start_play)(struct _Play* pPlay);
}Play;
多態(tài),就是說用同一的接口代碼處理不同的數(shù)據(jù)。比如說,這里的Play結(jié)構(gòu)就是一個通用的數(shù)據(jù)結(jié)構(gòu),我們也不清楚pData是什么數(shù)據(jù),start_play是什么處理函數(shù)?但是,我們處理的時候只要調(diào)用pPlay->start_play(pPlay)就可以了。剩下來的事情我們不需要管,因為不同的接口會有不同的函數(shù)去處理,我們只要學會調(diào)用就可以了。

-----------------------

02)C語言和設計模式(訪問者模式)


不知不覺當中,我們就到了最后一種設計模式,即訪問者模式。訪問者模式,聽上去復雜一些。但是,這種模式用簡單的一句話說,就是不同的人對不同的事物有不同的感覺。比如說吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐??墒?,不同的地方的人未必都喜歡這兩種豆腐。四川的朋友可能更喜歡辣豆腐,江浙的人就可能對臭豆腐更喜歡一些。那么,這種情況應該怎么用設計模式表達呢?
typedef struct _Tofu
{
int type;
void (*eat) (struct _Visitor* pVisitor, struct _Tofu* pTofu);
}Tofu;
typedef struct _Visitor
{
int region;
void (*process)(struct _Tofu* pTofu, struct _Visitor* pVisitor);
}Visitor;
就是這樣一個豆腐,eat的時候就要做不同的判斷了。
void eat(struct _Visitor* pVisitor, struct _Tofu* pTofu)
{
assert(NULL != pVisitor && NULL != pTofu);
pVisitor->process(pTofu, pVisitor);
}
既然eat的操作最后還是靠不同的visitor來處理了,那么下面就該定義process函數(shù)了。
void process(struct _Tofu* pTofu, struct _Visitor* pVisitor)
{
assert(NULL != pTofu && NULL != pVisitor);
if(pTofu->type == SPICY_FOOD && pVisitor->region == WEST ||
pTofu->type == STRONG_SMELL_FOOD && pVisitor->region == EAST)
{
printf("I like this food!\n");
return;
}
printf("I hate this food!\n");
}

-----------------------------------------------------

03)C語言和設計模式(狀態(tài)模式)

狀態(tài)模式是協(xié)議交互中使用得比較多的模式。比如說,在不同的協(xié)議中,都會存在啟動、保持、中止等基本狀態(tài)。那么怎么靈活地轉(zhuǎn)變這些狀態(tài)就是我們需要考慮的事情。假設現(xiàn)在有一個state,
typedef struct _State
{
void (*process)();
struct _State* (*change_state)();
}State;
說明一下,這里定義了兩個變量,分別process函數(shù)和change_state函數(shù)。其中proces函數(shù)就是普通的數(shù)據(jù)操作,
void normal_process()
{
printf("normal process!\n");
}
change_state函數(shù)本質(zhì)上就是確定下一個狀態(tài)是什么。
struct _State* change_state()
{
State* pNextState = NULL;
pNextState = (struct _State*)malloc(sizeof(struct _State));
assert(NULL != pNextState);
pNextState ->process = next_process;
pNextState ->change_state = next_change_state;
return pNextState;
}
所以,在context中,應該有一個state變量,還應該有一個state變換函數(shù)。
typedef struct _Context
{
State* pState;
void (*change)(struct _Context* pContext);
}Context;
void context_change(struct _Context* pContext)
{
State* pPre;
assert(NULL != pContext);
pPre = pContext->pState;
pContext->pState = pPre->changeState();
free(pPre);
return;
}

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

    關注

    5199

    文章

    20451

    瀏覽量

    334226
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145635
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    250

    瀏覽量

    28063
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    什么是嵌入式應用開發(fā)?

    概述 所謂的嵌入式應用開發(fā)就是在嵌入式操作系統(tǒng)下進行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應用開發(fā)?是指在嵌入式操作系統(tǒng)下進行開發(fā),包括系統(tǒng)化設計指導下的硬件和
    發(fā)表于 01-12 16:13

    做醫(yī)療嵌入式軟件研發(fā)以后好跳槽嗎?

    做醫(yī)療嵌入式軟件研發(fā),以后想跳槽一點兒也不難。別看醫(yī)療行業(yè)門檻高、規(guī)矩多,你手里攢下的那套本事,到哪兒都吃得開。嵌入式這東西,甭管在哪個行當里折騰,說到底六個基本部分跑不掉:嵌入式C、
    的頭像 發(fā)表于 12-03 11:04 ?727次閱讀
    做醫(yī)療<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>研發(fā)以后好跳槽嗎?

    嵌入式可測試性軟件設計

    單元測試框架 ,用來統(tǒng)一管理我們的測試例子。 嵌入式中,常用的測試框架: Unity:https://github.com/ThrowTheSwitch/Unity/releases cutest
    發(fā)表于 12-02 06:06

    CW32嵌入式軟件開發(fā)的必備知識

    嵌入式軟件開發(fā)作為計算機科學和電子工程的交叉領域,要求開發(fā)人員具備一系列的專業(yè)知識和技能。 而基于CW32的嵌入式軟件開發(fā)必備知識包括以下部分: 1 、編程語言 熟練掌握C(C++
    發(fā)表于 11-28 07:48

    在以下嵌入式軟件設計模型中,屬于數(shù)據(jù)流模型的是,哪里有設計模型的介紹?

    在以下嵌入式軟件設計模型中,屬于數(shù)據(jù)流模型的是()。A. CCSB. CSPC. FSMD. Petri Net
    發(fā)表于 11-24 15:55

    嵌入式與FPGA的區(qū)別

    ,一是嵌入式軟件開發(fā),主要與嵌入式cao作系統(tǒng)、應用軟件等有關。第二是嵌入式硬件開發(fā),需要掌握硬件設計、模擬仿真、 PCB設計等技能。 ?2
    發(fā)表于 11-20 07:12

    RT-Thread 2025嵌入式軟件大賽重磅來襲

    為激發(fā)開發(fā)者潛能、促進技術交流,RT-Thread 正式啟動2025年度嵌入式軟件大賽! 本賽道為嵌入式軟件大賽,聚焦嵌入式
    的頭像 發(fā)表于 09-22 16:40 ?3520次閱讀
    RT-Thread 2025<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>大賽重磅來襲

    RT-Thread 2025嵌入式軟件大賽重磅來襲

    為激發(fā)開發(fā)者潛能、促進技術交流,RT-Thread正式啟動2025年度嵌入式軟件大賽!本賽道為嵌入式軟件大賽,聚焦嵌入式
    的頭像 發(fā)表于 09-20 10:06 ?1761次閱讀
    RT-Thread 2025<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>大賽重磅來襲

    新一代嵌入式開發(fā)平臺 AMD嵌入式軟件和工具2025.1版現(xiàn)已推出

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開發(fā)而打造的綜合平臺,全面加速概念構(gòu)想到部署落地。 2025.1 版嵌入式軟件
    的頭像 發(fā)表于 08-20 09:15 ?3993次閱讀

    AMD 2025.1版嵌入式軟件和工具的新增功能

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開發(fā)而打造的綜合平臺,全面加速概念構(gòu)想到部署落地。
    的頭像 發(fā)表于 08-15 15:32 ?1275次閱讀

    【干貨速遞】嵌入式數(shù)據(jù)可靠性,軟件設計的這些細節(jié)不能忽視!

    前兩期內(nèi)容分別講述了嵌入式數(shù)據(jù)可靠性的元器件選型和硬件設計,這一期我們來講講軟件設計。哪怕硬件設計再完善,但如果軟件沒有設計好,也達不到預期的可靠性。只有軟硬件配合,才能妥善解決數(shù)據(jù)可靠性
    的頭像 發(fā)表于 07-31 11:34 ?567次閱讀
    【干貨速遞】<b class='flag-5'>嵌入式</b>數(shù)據(jù)可靠性,<b class='flag-5'>軟件設計</b>的這些細節(jié)不能忽視!

    河北軟件職業(yè)技術學院走訪飛凌嵌入式,共同探討產(chǎn)教融合新模式

    6月12日,河北軟件職業(yè)技術學院軟件工程系主任陳輝率隊走訪保定飛凌嵌入式技術有限公司,并與旗下教育品牌ElfBoard就產(chǎn)教融合、構(gòu)建協(xié)同育人機制進行了深入探討。雙方旨在通過深化校企合作,共同探索
    的頭像 發(fā)表于 06-16 11:00 ?1092次閱讀
    河北<b class='flag-5'>軟件</b>職業(yè)技術學院走訪飛凌<b class='flag-5'>嵌入式</b>,共同探討產(chǎn)教融合新<b class='flag-5'>模式</b>

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    開發(fā)(設備驅(qū)動、內(nèi)核編譯) 4. 推薦的學習資源書籍:《嵌入式系統(tǒng)軟件設計基礎》《ARM Cortex-M系列嵌入式開發(fā)》在線課程:慕課網(wǎng)、B站嵌入式教學視頻實踐平臺:Arduino、
    發(fā)表于 05-15 09:29

    嵌入式軟件行業(yè)增長驅(qū)動因素

    嵌入式軟件在物聯(lián)網(wǎng)應用中至關重要,因為它管理設備操作、控制傳感器、支持連接并確保數(shù)據(jù)安全。例如,在智能家居中,恒溫器、安全攝像頭和燈光等設備使用嵌入式系統(tǒng)獨立運行,并通過云平臺或本地網(wǎng)絡與其他智能
    的頭像 發(fā)表于 05-09 11:26 ?819次閱讀

    嵌入式編程設計模式

    嵌入式編程設計模式,介紹如何使用設計模式嵌入式系統(tǒng)創(chuàng)建高效且優(yōu)化的C語言設計。 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關注、點贊、評論支持一下哦~
    發(fā)表于 04-15 14:47