chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

嵌入式如何進行架構設計?

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

掃碼添加小助手

加入工程師交流群

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

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

2. 對嵌入式系統(tǒng)中的架構設計要刻意訓練;

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

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

【我對架構設計的理解】

1.架構設計概念的認識

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

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

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

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

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

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

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

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

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

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

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

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

說一個小故事。

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

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

因為拿到了源代碼,客戶肯定很開心啊,因為只要吃透了代碼,其他類似的設備都可以自己開發(fā)了。

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

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

故事是真實的。

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

沒有架構設計進行指導的代碼,有這些缺點:

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

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

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

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

相反的,如果架構設計的好,對各方面都有好處:

對于項目來說:

(1)項目周期可控

(2)代碼可讀性好

(3)功能可擴展

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

(5)并行開發(fā)

(6)單元測試方便

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

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

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

(3)debug輕松、快速

【如何進行架構設計】

1.設計文檔

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

但是具體需要怎么做?

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

如何為自己后期的維護做好鋪墊?

。。。

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

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

我的建議是:

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

在設計文檔中,就要把架構方面的設計體現(xiàn)出來。在實現(xiàn)的過程中,嚴格按照文檔中的要求來做。

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

2. 程序文件的物理模型

(1) 分層設計

業(yè)務層

功能模塊層

驅(qū)動層

(2) 分模塊設計

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

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

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

3.進程與線程的選擇

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

我一般的做法是:

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

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

(1) 使用進程

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

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

方便分布式部署。

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

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

(2) 使用線程

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

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

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

4. API設計

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

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

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

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

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

例如:

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

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

5. 文件目錄的設計

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

6.編譯腳本的設計(構建工具)

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

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

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

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

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

【Demo說明】

1.簡介

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

2.代碼獲取

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

密碼:3a9p

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

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

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

4.目錄結構

Makefile: 編譯腳本

application: 業(yè)務層

module: 功能模塊層

driver: 硬件驅(qū)動層

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

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

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

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

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





審核編輯 :李倩

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

    關注

    5196

    文章

    20323

    瀏覽量

    332226
  • 代碼
    +關注

    關注

    30

    文章

    4959

    瀏覽量

    73585
  • 編譯
    +關注

    關注

    0

    文章

    692

    瀏覽量

    35038

原文標題:技術分享|經(jīng)驗之談:嵌入式如何進行架構設計?

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    arm嵌入式主板優(yōu)缺點

    功能非常有限,這也導致限制了它的廣泛運用,而在ARM架構嵌入式主板上,一般可以通過總線等進行擴展,大大方便了客戶。在網(wǎng)絡傳輸方面,大多數(shù)的客戶要求嵌入式主板具有高速網(wǎng)絡功能來快速的傳
    發(fā)表于 01-08 07:08

    分享一個嵌入式開發(fā)學習路線

    技術,實現(xiàn)設備聯(lián)網(wǎng)上傳數(shù)據(jù)。 系統(tǒng)架構思維:理解企業(yè)級嵌入式開發(fā)的架構設計,如分層架構、模塊化設計等。 實踐建議:在STM32上移植FreeRTOS,實現(xiàn)多任務管理;用WiFi模塊實現(xiàn)
    發(fā)表于 12-04 11:01

    嵌入式系統(tǒng)軟件架構通常劃分

    嵌入式系統(tǒng)的軟件架構通常劃分如下分層設計: 應用層:環(huán)境溫度監(jiān)測、報警觸發(fā)邏輯。 中間件層:支持MQTT協(xié)議的網(wǎng)絡通信模塊,用于將溫度數(shù)據(jù)上傳至云端。 操作系統(tǒng)層:基于FreeRTOS進行多任務管理
    發(fā)表于 12-01 07:20

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

    合適的數(shù)據(jù)結構和算法。 3 、計算機體系結構 了解處理器架構,如ARM、x86等,以及指令集和內(nèi)存管理。 熟悉嵌入式系統(tǒng)的硬件組成,如微控制器、FPGA、DSP等。 可以很熟練地根據(jù)CW32嵌入式芯片
    發(fā)表于 11-28 07:48

    嵌入式軟件分層架構設計原則

    嵌入式軟件分層架構的設計原則如下: 模塊化和可擴展性:每一層應當保持松耦合,這樣當硬件變化或某些功能擴展時,只需要修改對應的層次,而不影響整體架構。 硬件無關性:上層代碼應當盡量避免直接依賴硬件
    發(fā)表于 11-28 07:05

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

    用于芯片量產(chǎn)前的功能驗證。 架構與工作原理差異 嵌入式系統(tǒng)采用順序執(zhí)行架構,基于馮·諾依曼或哈佛體系結構,程序指令按順序從存儲器中讀取并執(zhí)行。這種架構靈活但效率相對固定。 FPG
    發(fā)表于 11-19 06:55

    嵌入式需要掌握哪些核心技能?

    : 1)C語言與底層編程 核心地位:C語言是嵌入式開發(fā)的基石,需精通指針操作、內(nèi)存管理、位運算,直接操控硬件資源。 延伸技能:C++用于復雜項目架構設計,匯編語言優(yōu)化底層性能(如啟動代碼、中斷處理
    發(fā)表于 10-21 16:25

    海綿泡沫切割機嵌入式數(shù)控系統(tǒng)的硬件架構設計與核心

    嵌入式數(shù)控系統(tǒng)的硬件架構是海綿泡沫切割機穩(wěn)定運行、精準控制的物理基礎,其設計需圍繞切割工藝需求,實現(xiàn)數(shù)據(jù)處理、指令執(zhí)行、狀態(tài)感知與外部交互的高效協(xié)同。整體架構以核心控制模塊為中樞,聯(lián)動多個功能模塊
    的頭像 發(fā)表于 09-11 09:12 ?635次閱讀
    海綿泡沫切割機<b class='flag-5'>嵌入式</b>數(shù)控系統(tǒng)的硬件<b class='flag-5'>架構設</b>計與核心

    油介質(zhì)損耗及電阻率測試儀的嵌入式系統(tǒng)架構與抗干擾設計

    油介質(zhì)損耗及電阻率測試儀的精準檢測能力,不僅依賴于核心的電氣測量模塊與溫控系統(tǒng),更離不開穩(wěn)定可靠的嵌入式系統(tǒng)作為“中樞神經(jīng)”。嵌入式系統(tǒng)承擔著數(shù)據(jù)采集、運算處理等核心功能,其架構設計與抗干擾設計共同
    的頭像 發(fā)表于 09-02 13:57 ?487次閱讀
    油介質(zhì)損耗及電阻率測試儀的<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>架構</b>與抗干擾設計

    入行嵌入式應該怎么準備?

    架構、總線協(xié)議和存儲器管理等概念的理解也是必不可少的。 三、操作系統(tǒng)嵌入式系統(tǒng)通常需要運行一個實時操作系統(tǒng)(RTOS)或者一個精簡版的操作系統(tǒng)。熟悉RTOS的概念和使用方法,能夠編寫多任務和實時
    發(fā)表于 08-06 10:34

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

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

    聚徽解碼——從嵌入式到模塊化:國內(nèi)工控平板的柔性技術架構設

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

    嵌入式主板開發(fā)詳細指南

    嵌入式主板開發(fā)涉及硬件設計、軟件集成、系統(tǒng)優(yōu)化等多個環(huán)節(jié),需要結合具體應用場景進行深度定制。以下是嵌入式主板開發(fā)的詳細指南,涵蓋關鍵步驟、工具、挑戰(zhàn)及實際案例:一、開發(fā)流程與關鍵步驟1.需求分析
    的頭像 發(fā)表于 04-02 11:35 ?1151次閱讀
    <b class='flag-5'>嵌入式</b>主板開發(fā)詳細指南

    嵌入式主板選型與應用指南

    嵌入式主板是專為嵌入式系統(tǒng)設計的核心硬件平臺,廣泛應用于工業(yè)控制、物聯(lián)網(wǎng)、醫(yī)療設備等領域。以下是關于嵌入式主板的詳細介紹:1.嵌入式主板的核心特點緊湊尺寸:通常采用小型化設計(如Min
    的頭像 發(fā)表于 02-27 14:53 ?1106次閱讀
    <b class='flag-5'>嵌入式</b>主板選型與應用指南