一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

安芯教育科技 ? 來源:IOT物聯(lián)網(wǎng)小鎮(zhèn) ? 作者:IOT物聯(lián)網(wǎng)小鎮(zhèn) ? 2022-04-14 09:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

【我對(duì)架構(gòu)設(shè)計(jì)的理解】

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

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

我的理解是大概有下面2個(gè)原因:

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

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

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

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

在嵌入式系統(tǒng)的開發(fā)中,在操作系統(tǒng)的選擇上幾乎沒有太大的余地,大部分是 ARM+Linux 組合。

在 Linux 操作系統(tǒng)層面:那些大神們已經(jīng)把內(nèi)核和驅(qū)動(dòng)層設(shè)計(jì)的很完美了,很少需要開發(fā)人員做大量的修改。

在應(yīng)用程序?qū)用妫洪_發(fā)人員如果沒有什么追求,只為了實(shí)現(xiàn)規(guī)格書中定義的功能即可。

而老板呢,也只是重視產(chǎn)品功能是否能正常實(shí)現(xiàn),至于什么可移植、可擴(kuò)展、執(zhí)行效率等等,不會(huì)想到這個(gè)層面。

即使產(chǎn)品需要更新?lián)Q代,讓開發(fā)人員重新實(shí)現(xiàn)即可,反正只需要功能OK就行。

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

說一個(gè)小故事。

有一位同事為客戶寫一個(gè)單片機(jī)產(chǎn)品的程序,后來同事離職后把代碼移交給我。

這個(gè)產(chǎn)品有一個(gè)小功能需要修改一下,恰巧那會(huì)我正在處理另外一個(gè)項(xiàng)目,于是在征得老板許可的情況下把源代碼發(fā)給客戶,請(qǐng)他們自己修改。

因?yàn)槟玫搅嗽创a,客戶肯定很開心啊,因?yàn)橹灰酝噶舜a,其他類似的設(shè)備都可以自己開發(fā)了。

過了一段時(shí)間,我問客戶:上次那個(gè)產(chǎn)品的功能修改怎么樣了?

他說:還沒搞定呢,上次你給的代碼我丟了,會(huì)把人看死的,現(xiàn)在正從頭重新寫代碼呢。

故事是真實(shí)的。

代碼都是字符組成的,有些代碼看起來賞心悅目,有些代碼看起來懷疑人生。

沒有架構(gòu)設(shè)計(jì)進(jìn)行指導(dǎo)的代碼,有這些缺點(diǎn):

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

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

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

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

相反的,如果架構(gòu)設(shè)計(jì)的好,對(duì)各方面都有好處:

對(duì)于項(xiàng)目來說:

(1)項(xiàng)目周期可控

(2)代碼可讀性好

(3)功能可擴(kuò)展

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

(5)并行開發(fā)

(6)單元測(cè)試方便

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

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

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

(3)debug輕松、快速

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

1.設(shè)計(jì)文檔

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

但是具體需要怎么做?

如何在規(guī)定好的項(xiàng)目周期內(nèi)把事情做好,而且讓自己沒那么累?

如何為自己后期的維護(hù)做好鋪墊?

。。。

這些問題可能在項(xiàng)目初期的時(shí)候,都規(guī)劃的比較好。

但是在執(zhí)行過程中,就會(huì)越來越偷懶,越來越偏離預(yù)定義的方向。

我的建議是:

無論項(xiàng)目的大小,無論項(xiàng)目周期的長(zhǎng)短,一定要有設(shè)計(jì)文檔,設(shè)計(jì)文檔的詳細(xì)程度就需要根據(jù)項(xiàng)目的實(shí)際情況進(jìn)行靈活把握了。

在設(shè)計(jì)文檔中,就要把架構(gòu)方面的設(shè)計(jì)體現(xiàn)出來。在實(shí)現(xiàn)的過程中,嚴(yán)格按照文檔中的要求來做。

取乎其上,得乎其中;取乎其中,得乎其下。

2. 程序文件的物理模型

(1) 分層設(shè)計(jì)

業(yè)務(wù)層

功能模塊層

驅(qū)動(dòng)層

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

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

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

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

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

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

我一般的做法是:

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

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

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

各模塊獨(dú)立編譯,不會(huì)相互影響。

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

方便分布式部署。

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

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

(2) 使用線程

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

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

模塊之間調(diào)用方便,因?yàn)楹瘮?shù)地址直接可見。

4. API設(shè)計(jì)

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

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

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

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

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

例如:

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

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

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

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

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

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

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

其實(shí)完全可以在編譯腳本中為不同的平臺(tái)編譯一個(gè)版本。

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

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

【Demo說明】

1.簡(jiǎn)介

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

2.代碼獲取

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

密碼:3a9p

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

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

224638c4-bb96-11ec-aa7f-dac502259ad0.png

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

Makefile: 編譯腳本

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

module: 功能模塊層

driver: 硬件驅(qū)動(dòng)層

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

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

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

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

224638c4-bb96-11ec-aa7f-dac502259ad0.png





審核編輯 :李倩

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

    關(guān)注

    5152

    文章

    19678

    瀏覽量

    317798
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70802
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    34033

原文標(biāo)題:技術(shù)分享|經(jīng)驗(yàn)之談:嵌入式如何進(jìn)行架構(gòu)設(shè)計(jì)?

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    : 單片機(jī)嵌入式 :開發(fā)環(huán)境相對(duì)簡(jiǎn)單,通常使用C語言或匯編語言進(jìn)行編程,開發(fā)工具包括Keil、IAR等。 Linux嵌入式 :開發(fā)環(huán)境較為復(fù)雜,除了需要掌握C語言,還需要了解Linux操作系統(tǒng)的相關(guān)知識(shí)
    發(fā)表于 06-20 09:46

    聚徽解碼——從嵌入式到模塊化:國(guó)內(nèi)工控平板的柔性技術(shù)架構(gòu)設(shè)計(jì)

    在工業(yè) 4.0 與智能制造蓬勃發(fā)展的浪潮下,國(guó)內(nèi)工控平板作為工業(yè)自動(dòng)化與智能化的關(guān)鍵設(shè)備,其技術(shù)架構(gòu)設(shè)計(jì)正經(jīng)歷著從嵌入式到模塊化的深刻變革。這一轉(zhuǎn)變旨在賦予工控平板更強(qiáng)的柔性,使其能夠更高效、靈活
    的頭像 發(fā)表于 06-13 16:24 ?174次閱讀

    嵌入式主板的概述與發(fā)展

    未來發(fā)展趨勢(shì)進(jìn)行深入探討。嵌入式主板的基本概念嵌入式主板是指為嵌入式系統(tǒng)設(shè)計(jì)的電路板,它通常集成了微處理器、內(nèi)存、輸入輸出接口等關(guān)鍵組件。與一般的計(jì)算機(jī)主板相比,嵌
    的頭像 發(fā)表于 01-13 16:30 ?794次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發(fā)展

    ARM架構(gòu)嵌入式主板特點(diǎn)

    極其廣泛。ARM架構(gòu)嵌入式主板有什么特點(diǎn)呢?一、工作時(shí)間及環(huán)境:ARM主板不受時(shí)間限制,可常開機(jī),無需人員維護(hù)。在有電源調(diào)節(jié)的情況下,只要接通電源,就會(huì)自動(dòng)啟動(dòng),
    的頭像 發(fā)表于 12-31 16:03 ?1039次閱讀
    ARM<b class='flag-5'>架構(gòu)</b><b class='flag-5'>嵌入式</b>主板特點(diǎn)

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

    RISC-V是一種開源的指令集架構(gòu)(ISA),它允許任何人設(shè)計(jì)、制造和銷售基于RISC-V的處理器,這為嵌入式開發(fā)提供了極大的靈活性和創(chuàng)新空間。以下是使用RISC-V進(jìn)行嵌入式開發(fā)的基
    的頭像 發(fā)表于 12-11 17:32 ?1976次閱讀

    邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐

    邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐涉及多個(gè)方面,以下是一些關(guān)鍵要素和最佳實(shí)踐建議: 一、核心組件與架構(gòu)設(shè)計(jì) 邊緣設(shè)備與網(wǎng)關(guān) 邊緣設(shè)備 :包括各種嵌入式設(shè)備、傳感器、智能手機(jī)、智能攝像頭等,負(fù)責(zé)采集原始數(shù)據(jù)
    的頭像 發(fā)表于 10-24 14:17 ?1118次閱讀

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+ Hypervisor應(yīng)用場(chǎng)景調(diào)研

    繼續(xù)研讀《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》,想搞清楚Hypervisor的具體應(yīng)用場(chǎng)景,是否能用于我們的嵌入式產(chǎn)品設(shè)計(jì)。 通過閱讀“Hypervisor類型和產(chǎn)品”一節(jié),知道了
    發(fā)表于 10-14 11:21

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+ 了解Hypervisor

    正值舉國(guó)歡度國(guó)慶佳節(jié)之際,我收到了《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》一書,在此感謝電子發(fā)燒友論壇!當(dāng)初申請(qǐng)?jiān)u測(cè)此書之時(shí),我根本就不知道這個(gè)Hypervisor是什么,只是看到有嵌入式
    發(fā)表于 10-13 16:47

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+全文學(xué)習(xí)心得

    在深入研讀《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》這部專著后,我對(duì)嵌入式Hypervisor技術(shù)有了全面而深入的理解。從基礎(chǔ)的架構(gòu)原理到高級(jí)特性與優(yōu)化策略,再到其在各個(gè)領(lǐng)域中
    發(fā)表于 10-09 19:11

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+第7-8章學(xué)習(xí)心得

    這是一本很好的學(xué)習(xí)嵌入式的書籍。 在深入學(xué)習(xí)《嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用》的第7-8章后,我對(duì)嵌入式Hypervisor的架構(gòu)
    發(fā)表于 10-09 18:50

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+第三四章閱讀報(bào)告

    Hypervisor如何通過特定的架構(gòu)設(shè)計(jì)和算法實(shí)現(xiàn),來確保多個(gè)虛擬機(jī)(VMs)在有限資源下的高效、安全運(yùn)行。 關(guān)鍵收獲 : 架構(gòu)設(shè)計(jì) :了解到嵌入式Hypervisor通常采用微內(nèi)核或分離內(nèi)核
    發(fā)表于 10-09 18:29

    嵌入式MXM模塊(NVIDIA安培架構(gòu))

    電子發(fā)燒友網(wǎng)站提供《嵌入式MXM模塊(NVIDIA安培架構(gòu)).pdf》資料免費(fèi)下載
    發(fā)表于 10-09 11:09 ?0次下載

    嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用 閱讀體驗(yàn) +Hypervisor基礎(chǔ)概念

    本章詳細(xì)介紹了虛擬化技術(shù)的基本概念、實(shí)現(xiàn)方式以及應(yīng)用領(lǐng)域,著重介紹了嵌入式虛擬化技術(shù)的特點(diǎn)、面臨的挑戰(zhàn)以及具體的解決方案。嵌入式Hypervisor一直被認(rèn)為是嵌入式系統(tǒng)軟件的下一個(gè)前沿領(lǐng)域,以
    的頭像 發(fā)表于 10-08 15:08 ?1405次閱讀
    <b class='flag-5'>嵌入式</b>Hypervisor:<b class='flag-5'>架構(gòu)</b>、原理與應(yīng)用 閱讀體驗(yàn) +Hypervisor基礎(chǔ)概念

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備中執(zhí)行專門任務(wù)。嵌入式主板如同是設(shè)備的“大腦”,主要功能是根據(jù)需要管理和控制設(shè)備
    的頭像 發(fā)表于 09-30 10:05 ?1632次閱讀

    名單公布!【書籍評(píng)測(cè)活動(dòng)NO.42】 嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用

    嵌入式Hypervisor的架構(gòu)、設(shè)計(jì)與實(shí)現(xiàn)、高級(jí)應(yīng)用和未來規(guī)劃。閱讀本書,不僅提升讀者對(duì)嵌入式Hypervisor的認(rèn)知,還能助力汽車、航空航天等高安全需求行業(yè)打造適用的產(chǎn)品,構(gòu)建
    發(fā)表于 08-23 15:17