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

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

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

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

探究嵌入式開發(fā)是否需要架構(gòu)設(shè)計?

GReq_mcu168 ? 來源:CSDN技術(shù)社區(qū)道哥分享 ? 作者:CSDN技術(shù)社區(qū)道哥分 ? 2021-04-05 09:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

閱讀這篇文章,你能了解到什么

1. 從事嵌入式開發(fā)12年的我,對架構(gòu)設(shè)計的理解;

2. 對嵌入式系統(tǒng)中的架構(gòu)設(shè)計要刻意訓(xùn)練;

3. 嵌入式系統(tǒng)開發(fā)過程中的一些小技巧;

4. 一個用于智能家居項目的Demo,可以直接編譯、執(zhí)行;

我對架構(gòu)設(shè)計的理解

1.架構(gòu)設(shè)計概念的認(rèn)識

相信看這篇文章的同學(xué),大部分都是從事嵌入式開發(fā)的,大家也肯定有這么一個印象:在招聘網(wǎng)站上的一些架構(gòu)設(shè)計的崗位,都是針對 Web 方向的,卻很少看到招聘嵌入式崗位的系統(tǒng)架構(gòu)師的崗位。

我的理解是大概有下面2個原因:

(1) Web開發(fā):百家爭鳴,沒有統(tǒng)一的標(biāo)準(zhǔn)和老大

這些年得益于移動互聯(lián)網(wǎng)的發(fā)展,前、后端開發(fā)崗位的需求量大增,而且各種框架層出不窮。

如何利用這些框架來為用戶提供高性能的服務(wù)并沒有一個統(tǒng)一的標(biāo)準(zhǔn),于是百家爭鳴,相應(yīng)的設(shè)計師崗位也就層出不窮。

(2) 嵌入式開發(fā):Linux 舍我其誰

在嵌入式系統(tǒng)的開發(fā)中,在操作系統(tǒng)的選擇上幾乎沒有太大的余地,大部分是 ARM+Linux 組合。在 Linux 操作系統(tǒng)層面:那些大神們已經(jīng)把內(nèi)核和驅(qū)動層設(shè)計的很完美了,很少需要開發(fā)人員做大量的修改。在應(yīng)用程序?qū)用妫洪_發(fā)人員如果沒有什么追求,只為了實現(xiàn)規(guī)格書中定義的功能即可。而老板呢,也只是重視產(chǎn)品功能是否能正常實現(xiàn),至于什么可移植、可擴展、執(zhí)行效率等等,不會想到這個層面。即使產(chǎn)品需要更新?lián)Q代,讓開發(fā)人員重新實現(xiàn)即可,反正只需要功能OK就行。

2.嵌入式系統(tǒng)的架構(gòu)設(shè)計重要性

說一個小故事。有一位同事為客戶寫一個單片機產(chǎn)品的程序,后來同事離職后把代碼移交給我。這個產(chǎn)品有一個小功能需要修改一下,恰巧那會我正在處理另外一個項目,于是在征得老板許可的情況下把源代碼發(fā)給客戶,請他們自己修改。因為拿到了源代碼,客戶肯定很開心啊,因為只要吃透了代碼,其他類似的設(shè)備都可以自己開發(fā)了。過了一段時間,我問客戶:上次那個產(chǎn)品的功能修改怎么樣了?他說:還沒搞定呢,上次你給的代碼我丟了,會把人看死的,現(xiàn)在正從頭重新寫代碼呢。

故事是真實的。

代碼都是字符組成的,有些代碼看起來賞心悅目,有些代碼看起來懷疑人生。沒有架構(gòu)設(shè)計進(jìn)行指導(dǎo)的代碼,有這些缺點:

(1) 代碼不能復(fù)用,移植很麻煩。

(2) 當(dāng)需求發(fā)生改動時,不能快速調(diào)整代碼。

(3) 對于已有的代碼:不敢改、不想改,牽一發(fā)而動全身。

(4) 調(diào)試bug很頭疼。

相反的,如果架構(gòu)設(shè)計的好,對各方面都有好處:對于項目來說:

(1) 項目周期可控

(2) 代碼可讀性好

(3) 功能可擴展

(4) 修改單一模塊不會影響其他功能

(5) 并行開發(fā)

(6) 單元測試方便

對于開發(fā)人員來說

(1) 節(jié)省開發(fā)時間

(2) 全局視角,提高開發(fā)大型項目的能力

(3) debug輕松、快速

如何進(jìn)行架構(gòu)設(shè)計

1.設(shè)計文檔

只要進(jìn)入編程領(lǐng)域,大家都知道要高內(nèi)聚、低耦合,分模塊、分層設(shè)計。

但是具體需要怎么做?如何在規(guī)定好的項目周期內(nèi)把事情做好,而且讓自己沒那么累?如何為自己后期的維護(hù)做好鋪墊?

這些問題可能在項目初期的時候,都規(guī)劃的比較好。但是在執(zhí)行過程中,就會越來越偷懶,越來越偏離預(yù)定義的方向。

我的建議是:

無論項目的大小,無論項目周期的長短,一定要有設(shè)計文檔,設(shè)計文檔的詳細(xì)程度就需要根據(jù)項目的實際情況進(jìn)行靈活把握了。在設(shè)計文檔中,就要把架構(gòu)方面的設(shè)計體現(xiàn)出來。在實現(xiàn)的過程中,嚴(yán)格按照文檔中的要求來做。取乎其上,得乎其中;取乎其中,得乎其下。

2. 程序文件的物理模型

(1) 分層設(shè)計

業(yè)務(wù)層、功能模塊層、驅(qū)動層。

(2) 分模塊設(shè)計

根據(jù)功能來劃分模塊

模塊之間通過API接口函數(shù)進(jìn)行數(shù)據(jù)交互

設(shè)計靈活的API接口函數(shù)

3. 進(jìn)程與線程的選擇

在嵌入式系統(tǒng)中,實現(xiàn)產(chǎn)品的功能,可以通過多個進(jìn)程相互配合來完成,也可以用多線程來實現(xiàn),這個選擇沒有固定的標(biāo)準(zhǔn),視項目的具體情況而定。

我一般的做法是:

如果產(chǎn)品功能不復(fù)雜,盡量用多線程來實現(xiàn);

如果產(chǎn)品設(shè)計到的功能比較多,那么就把強相關(guān)的模塊放到獨立的進(jìn)程中。

(1) 使用進(jìn)程

各模塊獨立編譯,不會相互影響。

出現(xiàn)類似 SegmentFault 問題,很容易定位到肇事者。

方便分布式部署。

代碼安全:除了整合人員,其他人只需要 clone 自己負(fù)責(zé)的模塊代碼,沒有權(quán)限、也不需要訪問別人的代碼。

但是:需要考慮到進(jìn)程之間的通信問題,比如:IPC調(diào)用、socket通信、總線。(我一般都會采用在本地系統(tǒng)內(nèi)使用一條MQTT總線來掛接所有的通訊模塊)

(2) 使用線程

創(chuàng)建線程成本低。

線程之間共享全局變量(換個角度,這也是一種缺點)。

模塊之間調(diào)用方便,因為函數(shù)地址直接可見。

4. API設(shè)計

可以把一個模塊看成是黑盒,給定一個輸入,就會返回確定的結(jié)果,或者執(zhí)行確定的功能,

模塊之間只需要定義好這個API接口函數(shù)就行。

至于模塊內(nèi)部是如何實現(xiàn)的,大家各顯其能。

另外,如果你是API設(shè)計人員,一定要注意要讓調(diào)用者用起來很舒服。就像你遞一把剪刀給別人,一定是把手給對方。

另外一個經(jīng)驗,在項目設(shè)計初期,盡量不要把API的函數(shù)設(shè)計的太死板,容易給自己下套。

例如:

(1) 可以設(shè)計帶有 char *的變量,使用json格式的字符串,來傳遞任意長度和類型的數(shù)據(jù)。

(2) 可以設(shè)計帶有 void *的變量,用來傳遞任意數(shù)據(jù)類型的地址,這個功能在很多項目中被使用的出神入化,比如:很早之前高通手機的BREW平臺,智能家居中的 ZWave平臺。

5. 文件目錄的設(shè)計

這部分容易理解,職責(zé)不同的文件要存放到相應(yīng)的目錄中:頭文件、庫文件、可執(zhí)行文件、相關(guān)文檔。如果這部分組織的不夠好,當(dāng)你把項目移交給其他同事時,肯定會被其他人在心中默念一千遍:F-U-C-K Y-O-U!

6.編譯腳本的設(shè)計(構(gòu)建工具)

當(dāng)我們接到一個嵌入式項目時,在確定方案之后,程序運行的平臺都是確定的,大部分情況就是嵌入式Linux,或者是一些變體。

在開發(fā)階段,我見過有些開發(fā)人員每調(diào)試一個功能點,就把代碼交叉編譯后放,然后通過NFS遠(yuǎn)程掛載,或者scp遠(yuǎn)程拷貝,在真實設(shè)備上執(zhí)行。我看著都比較累。

其實完全可以在編譯腳本中為不同的平臺編譯一個版本。

比如:使用Ubuntu系統(tǒng)來開發(fā)產(chǎn)品時,只要x86平臺可以模擬產(chǎn)品功能,就直接編譯x86版本。

當(dāng)所有的功能點在x86平臺上測試OK了, 再統(tǒng)一放到真實的嵌入式系統(tǒng)中進(jìn)行聯(lián)調(diào),這樣做能節(jié)省很多時間。

Demo說明

1.簡介

這個Demo是從一個智能家居項目中抽取出來的,只是體現(xiàn)了各功能模塊的設(shè)計,函數(shù)內(nèi)部沒有實現(xiàn)任何功能,僅僅是用來展示設(shè)計的過程。

2.代碼獲取

https://pan.baidu.com/s/1B3F9byydXeNWdtgYEEQNLg

密碼:3a9p

在 Ubuntu16.04 系統(tǒng)下,可以直接編譯執(zhí)行。

3.系統(tǒng)架構(gòu)圖

pIYBAGBihVqAUJCpAAsGaPmYpzo175.png

4.目錄結(jié)構(gòu)

Makefile: 編譯腳本

application: 業(yè)務(wù)層

module: 功能模塊層

driver: 硬件驅(qū)動層

5. 執(zhí)行序列演示

圖中橙色的箭頭,表示從云端發(fā)來一個控制指令。

業(yè)務(wù)層接收到指令后,解析指令,發(fā)送給 Control 模塊。

Control 模塊再次解析具體的指令,發(fā)送給 ZigBee 設(shè)備,同時記錄到日志中。

pIYBAGBihSmAekqcAArNNczJ25Q828.png

編輯:jq

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

    關(guān)注

    5146

    文章

    19598

    瀏覽量

    316247
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1912

    瀏覽量

    86709
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1568

    瀏覽量

    63728

原文標(biāo)題:嵌入式開發(fā)需要架構(gòu)設(shè)計嗎?

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開發(fā)成為熱門技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開發(fā)入門指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式開發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開發(fā)的門檻,往往被培訓(xùn)機構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語言寫個跑在 ARM 上的程序” 就是嵌入式,實則連皮毛都未觸及。真正的嵌入式開發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?307次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>:高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    2025年嵌入式開發(fā)趨勢:新技術(shù)如何影響你的工作?

    嵌入式開發(fā)的世界正在快速變化,新技術(shù)的崛起正悄然改變硬件設(shè)計、軟件架構(gòu)以及開發(fā)方式。無論你是剛?cè)腴T的新手,還是經(jīng)驗豐富的工程師,理解這些趨勢不僅能幫助你應(yīng)對技術(shù)變革,還能在職業(yè)發(fā)展中占據(jù)主動
    的頭像 發(fā)表于 03-14 17:36 ?1432次閱讀
    2025年<b class='flag-5'>嵌入式開發(fā)</b>趨勢:新技術(shù)如何影響你的工作?

    BlackBerry QNX推出通用嵌入式開發(fā)平臺

    BlackBerry有限公司(紐交所代碼:BB;多倫多證券交易所代碼:BB)旗下部門QNX今日宣布推出QNX 通用嵌入式開發(fā)平臺(General Embedded Development
    的頭像 發(fā)表于 03-11 16:04 ?592次閱讀

    AI來襲!嵌入式開發(fā)者該如何應(yīng)對轉(zhuǎn)型?

    AI正在改變世界!從自動駕駛到智能家居,從工業(yè)自動化到語音助手,各行各業(yè)都在朝著智能化方向邁進(jìn)。對于嵌入式開發(fā)者來說,AI的到來既是一次前所未有的挑戰(zhàn),也是一個充滿機遇的時代。過去,我們專注于硬件
    的頭像 發(fā)表于 03-04 14:41 ?759次閱讀
    AI來襲!<b class='flag-5'>嵌入式開發(fā)</b>者該如何應(yīng)對轉(zhuǎn)型?

    代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實戰(zhàn)正式出版

    尊敬的各位電子工程師、嵌入式開發(fā)愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導(dǎo)體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發(fā)表于 03-03 15:15 ?633次閱讀
    代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32<b class='flag-5'>嵌入式開發(fā)</b>實戰(zhàn)正式出版

    如何成為嵌入式開發(fā)工程師?

    如何成為嵌入式開發(fā)工程師? 成為嵌入式開發(fā)工程師通常需要掌握一系列技能和知識,并且在實踐中不斷積累經(jīng)驗。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計算機科學(xué)或相關(guān)領(lǐng)域的學(xué)位
    發(fā)表于 02-19 10:39

    盤點工程師常用的嵌入式開發(fā)工具

    嵌入式開發(fā)涉及硬件與軟件的緊密結(jié)合,開發(fā)工具的選擇對效率和質(zhì)量至關(guān)重要。以下是嵌入式開發(fā)中常用的工具分類及代表性工具,涵蓋開發(fā)全流程: 1. 集成
    的頭像 發(fā)表于 02-07 10:06 ?1917次閱讀

    嵌入式開發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    實用干貨!嵌入式開發(fā)學(xué)習(xí)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)關(guān)注觸覺智能持續(xù)為大家?guī)砀?b class='flag-5'>嵌入式開發(fā)內(nèi)容
    的頭像 發(fā)表于 12-31 10:51 ?117次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    如何使用 RISC-V 進(jìn)行嵌入式開發(fā)

    、準(zhǔn)備開發(fā)環(huán)境 選擇開發(fā)板 :RISC-V架構(gòu)嵌入式開發(fā)板有多種選擇,如GD32VF103R-START、飛凌嵌入式OK113i-S等。選
    的頭像 發(fā)表于 12-11 17:32 ?1839次閱讀

    基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南

    電子發(fā)燒友網(wǎng)站提供《基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南.pdf》資料免費下載
    發(fā)表于 12-10 15:31 ?37次下載

    零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線

    。移植操作系統(tǒng)是嵌入式開發(fā)必須掌握的技能,需要了解U-BOOT、內(nèi)核、根文件系統(tǒng),以及它們的裁剪、編譯、燒寫過程。在這一塊,驅(qū)動是比較復(fù)雜的部分,需要同時懂得底層硬件和內(nèi)核。這部分掌握好了就可以去
    發(fā)表于 10-25 15:55

    嵌入式開發(fā)常見問題排查

    歸結(jié)為相對簡單的小問題。接下來,我們將討論一些嵌入式開發(fā)中常見的問題及其解決方法。一、問題復(fù)現(xiàn)要有效解決問題,首先需要能夠穩(wěn)定地復(fù)現(xiàn)它。一般來說,容易復(fù)現(xiàn)的問題也相對
    的頭像 發(fā)表于 09-22 08:04 ?777次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>常見問題排查

    聚焦嵌入式開發(fā)中的合規(guī)性工具、項目管理工具、版本迭代工具應(yīng)用

    日前,龍智攜嵌入式開發(fā)及管理解決方案亮相2024上海國際嵌入式展(embedded world China 2024)。展會期間,我們對話了多位龍智資深DevSecOps顧問及技術(shù)支持專家
    的頭像 發(fā)表于 07-29 15:15 ?1028次閱讀

    嵌入式開發(fā)前景怎么樣?

    嵌入式開發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個領(lǐng)域的廣泛應(yīng)用。以下是對嵌入式開發(fā)前景的詳細(xì)分析
    的頭像 發(fā)表于 07-10 09:00 ?4299次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?
    主站蜘蛛池模板: 亚洲人成电影院 | 日韩免费高清一级毛片在线 | 色婷婷5月 | 亚洲影院手机版777点击进入影院 | 色老头性xxxx老头视频 | 亚洲a人片在线观看网址 | 婷婷色天使在线视频观看 | 亚洲一级毛片免费观看 | 9984四虎永久免费网站 | 天天做天天玩天天爽天天 | 性夜影院爽黄a爽免费看网站 | 久操中文 | 一级特黄国产高清毛片97看片 | 黄色在线观看网站 | 天天综合五月天 | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 色婷婷综合网 | 夜夜做夜夜爽 | 欧美一级淫片免费播放口 | 国产精品福利午夜一级毛片 | 五月天婷婷久久 | 天天操天天射天天舔 | 美女国产视频 | 奇米网在线观看 | 天堂最新在线资源 | 美女脱裤子屁屁视频 | 日本丰满毛茸茸熟妇 | 欧美一区二区三区黄色 | 亚洲va中文va欧美va爽爽 | 欧美成人午夜精品免费福利 | 色妞视频资源在线观看 | 朱元璋传奇1998王耿豪版 | 毛片新网址| 超级毛片 | 黄黄视频免费看 | 欧美一级特黄高清免费 | 性xxxxbbbb免费播放视频 | 日日噜噜夜夜狠狠va视频 | 婷婷99视频精品全部在线观看 | 欧美天堂色| 欧美一级第一免费高清 |