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

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

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

如何正確的設(shè)計(jì)嵌入式軟件架構(gòu)應(yīng)該這么做

Q4MP_gh_c472c21 ? 來源:未知 ? 2019-01-29 15:45 ? 次閱讀

錯(cuò)誤的示范

公司新招了一個(gè)做嵌入式軟件開發(fā)的同事,該同事是從上海的某一個(gè)上市公司出來的,因?yàn)槲覀冞@邊人手不夠,因此把他安排了去負(fù)責(zé)一個(gè)新產(chǎn)品的研發(fā),前期讓他負(fù)責(zé)加速度計(jì)、NB-IOT、舵機(jī)、外置Flash的功能測試,測試完成之后,準(zhǔn)備讓他做一個(gè)該產(chǎn)品的概要設(shè)計(jì)。然后他花了2個(gè)星期的時(shí)間,給我們寫出來一個(gè)概要設(shè)計(jì),說實(shí)話,我看到這個(gè)概要設(shè)計(jì),我就覺得是剛畢業(yè)的大學(xué)生寫的。版本一的架構(gòu)設(shè)計(jì)

2.1系統(tǒng)體系結(jié)構(gòu)系統(tǒng)分為兩層:硬件驅(qū)動(dòng)層、應(yīng)用層。2.1.1硬件驅(qū)動(dòng)層硬件驅(qū)動(dòng)層包含板載硬件資源正常運(yùn)行所需的所有驅(qū)動(dòng)程序。1)MCU初始化2)I2C數(shù)據(jù)存取3)SPI數(shù)據(jù)讀取4)加速度計(jì)初始化5)藍(lán)牙模塊啟動(dòng)6)BC95模塊啟動(dòng)7)485通訊模塊啟動(dòng)2.2.2應(yīng)用層1)Mcu運(yùn)行模式切換2)震動(dòng)及傾斜3)數(shù)據(jù)解析4)開/關(guān)鎖5)數(shù)據(jù)發(fā)送6)歷史數(shù)據(jù)保存

看到版本一的架構(gòu)設(shè)計(jì)之后,說實(shí)話,我還是第一次見到這樣來寫架構(gòu)設(shè)計(jì)的,居然是以序號來寫的,這個(gè)讓別人讀起來,特別的別扭。版本二的架構(gòu)設(shè)計(jì)

看到版本二的架構(gòu)設(shè)計(jì)之后,雖然頗感欣慰,但是想到達(dá)到我們所要求的,還要很大的一段距離,該架構(gòu)設(shè)計(jì),主要有以下幾點(diǎn)問題:1.對架構(gòu)的理解還不是很清晰,既然是做架構(gòu)設(shè)計(jì),那就應(yīng)該從整體來看,而不是僅僅只是局限于一個(gè)模塊,或者功能里面。2.還是每個(gè)層次的理解也還不是很清晰,比如講MCU的初始化,歸于硬件驅(qū)動(dòng)層里面。MCU的初始化,嚴(yán)格意義上來說,是屬于流程的一部分了,而不是驅(qū)動(dòng)。比如電腦的開啟啟動(dòng),把這個(gè)歸于硬件的驅(qū)動(dòng)里面,肯定是屬于牛頭不對馬嘴的。3.還有就是各個(gè)模塊的啟動(dòng),也是不能屬于硬件驅(qū)動(dòng)層的,也都是業(yè)務(wù)流程的一部分了,都不應(yīng)該屬于驅(qū)動(dòng)層的一部分。4.還有就是總線數(shù)據(jù)的讀寫,雖然驅(qū)動(dòng)的作用也就是讀寫,但是數(shù)據(jù)總線的讀寫不能寫成硬件驅(qū)動(dòng)。5.應(yīng)用層的系統(tǒng)參數(shù)初始化,也還是屬于流程。6.數(shù)據(jù)的解析和數(shù)據(jù)的發(fā)生,都是屬于通信功能里面的,不應(yīng)該單獨(dú)獨(dú)立出來,屬于單個(gè)的應(yīng)用。

更改版基本框架圖

(1)架構(gòu)設(shè)計(jì)的目的1.應(yīng)用的代碼邏輯清晰,且避免重復(fù)造輪子。2.如果沒有好的架構(gòu),移植將會(huì)是一件很痛苦的事情,因此一個(gè)好的架構(gòu)設(shè)計(jì),方便軟件的移植。3.最大限度地復(fù)用。4.高耦合低內(nèi)聚。(2)設(shè)計(jì)思路如何把硬件的驅(qū)動(dòng)和一個(gè)功能封裝成一個(gè)個(gè)的模塊,然后可以像小朋友搭積木一個(gè),一個(gè)個(gè)模塊可以快速的拼接起來,組成一個(gè)個(gè)不同的模型。我們的嵌入式架構(gòu)思路也是來源于此,即功能模塊化設(shè)計(jì)、分層設(shè)計(jì)。這個(gè)設(shè)計(jì)和WEB開發(fā)的MVC模式類似,都是注重分層設(shè)計(jì)。模塊化設(shè)計(jì):將收集到的需求,進(jìn)行歸類,總結(jié)和分析,將這些需求概括為一個(gè)個(gè)單獨(dú)的功能,每一個(gè)功能,做成一個(gè)單獨(dú)的功能模塊。分層設(shè)計(jì)一句話不好直接表達(dá),其主要體現(xiàn)在一下幾方面:1.功能模塊對外調(diào)用的模塊封裝成一個(gè)個(gè)API,將底層驅(qū)動(dòng)做個(gè)API以供功能模塊調(diào)用。(各個(gè)功能模塊可以獨(dú)立編譯(如通信模塊純ANSI C,可在任意平臺(tái)復(fù)用),或者調(diào)用驅(qū)動(dòng)層接口(日志庫模塊調(diào)用了驅(qū)動(dòng)讀寫Flash),總而言之,言而總之,封裝出各個(gè)功能獨(dú)立的可復(fù)用的功能模塊。)2.API分為驅(qū)動(dòng)層API和應(yīng)用層API,而不是所有程序都調(diào)用驅(qū)動(dòng)層API。(整個(gè)應(yīng)用中都調(diào)用驅(qū)動(dòng)層API會(huì)導(dǎo)致應(yīng)用中驅(qū)動(dòng)調(diào)用隨處可見,無法移植和最大限度的復(fù)用)總體分 硬件驅(qū)動(dòng)層-->功能模塊層-->業(yè)務(wù)邏輯層-->應(yīng)用層總體結(jié)構(gòu)示意框圖:

說明:1.層與層之間不能跨層調(diào)用。2.模塊與模塊各自獨(dú)立,無依賴關(guān)系。3.模塊提供統(tǒng)一的接口供上層調(diào)用,模塊的內(nèi)外接口分明。4.模塊的功能只能增,不能改。5.各個(gè)功能模塊層也還可以進(jìn)行繼續(xù)分層,比如接口層、驅(qū)動(dòng)層、硬件層。(3)模塊層次說明

硬件驅(qū)動(dòng)層硬件驅(qū)動(dòng)層包含板載硬件資源正常運(yùn)行所需的所有驅(qū)動(dòng)程序并提供API給功能模塊調(diào)用。

功能模塊層功能模塊層包括實(shí)現(xiàn)具體功能的函數(shù),通過調(diào)用驅(qū)動(dòng)層API實(shí)現(xiàn)相應(yīng)功能,同時(shí)提供可調(diào)用的API給業(yè)務(wù)邏輯層。

業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層包括產(chǎn)品整體功能的各個(gè)業(yè)務(wù)流程,通過調(diào)用功能模塊層的API實(shí)現(xiàn)。

應(yīng)用層應(yīng)用層將各個(gè)業(yè)務(wù)邏輯進(jìn)行整合調(diào)用,完成整個(gè)產(chǎn)品的功能。(4)優(yōu)勢如果驅(qū)動(dòng)變動(dòng)了,或者換不同平臺(tái),只需更改驅(qū)動(dòng)層,應(yīng)用層不受影響。如果功能模塊變動(dòng)了,只需升級相應(yīng)的功能模塊,其他的模塊不受影響,應(yīng)用層也不受影響。按照這種邏輯設(shè)計(jì)好之后,主要的工作就是在業(yè)務(wù)邏輯層。應(yīng)用層則為程序的總體流程和框架,主要調(diào)用業(yè)務(wù)邏輯層實(shí)現(xiàn)不同的功能。

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

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347765
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18817

    瀏覽量

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

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61489

原文標(biāo)題:嵌入式軟件架構(gòu)設(shè)計(jì)實(shí)際該怎么做?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識?

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識? 一、 什么是嵌入式軟件嵌入式
    發(fā)表于 02-19 11:23

    嵌入式系統(tǒng)的軟件架構(gòu)設(shè)計(jì)!

    1. 前言嵌入式軟件設(shè)計(jì)領(lǐng)域的一個(gè)分支,它自身的諸多特點(diǎn)決定了系統(tǒng)架構(gòu)師的選擇,同時(shí)它的一些問題又具有相當(dāng)?shù)耐ㄓ眯?,可以推廣到其他的領(lǐng)域。提起嵌入式
    發(fā)表于 08-10 07:46

    嵌入式軟件開發(fā)中的程序架構(gòu)

    嵌入式軟件開發(fā),包括單片機(jī)開發(fā)中,軟件架構(gòu)對于開發(fā)人員是一個(gè)必須認(rèn)真考慮的問題。軟件架構(gòu)對于系
    發(fā)表于 02-02 06:58

    嵌入式架構(gòu)有多重要

    原有的代碼。接下來嵌入式ARM便和大家分享一下,嵌入式架構(gòu)那些事兒……01嵌入式系統(tǒng)的基本架構(gòu)嵌入式
    發(fā)表于 10-27 08:15

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

    為何要進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?如何進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?
    發(fā)表于 11-01 06:31

    決定嵌入式系統(tǒng)軟件架構(gòu)的因素和架構(gòu)的影響

    嵌入式系統(tǒng)軟件架構(gòu)設(shè)計(jì)目錄1.前言42.決定架構(gòu)的因素和架構(gòu)的影響42.1.常見的誤解52.1.1.小型的系統(tǒng)不需要
    發(fā)表于 11-08 06:54

    嵌入式軟件基礎(chǔ)的四層架構(gòu)分別是哪些

    嵌入式軟件分層架構(gòu)基本原則有哪些?嵌入式軟件基礎(chǔ)的四層架構(gòu)分別是哪些?
    發(fā)表于 12-24 07:57

    嵌入式軟件架構(gòu)設(shè)計(jì)

    嵌入式軟件架構(gòu)的設(shè)計(jì),幫助我們建立合理,有效的軟件架構(gòu)。
    發(fā)表于 11-09 17:34 ?19次下載

    嵌入式軟件是什么意思_嵌入式軟件的分類有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹了嵌入式軟件的特征,最后介紹了嵌入式軟件的分類。
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    嵌入式開發(fā)中常用的軟件架構(gòu)

    嵌入式軟件開發(fā),包括單片機(jī)開發(fā)中,軟件架構(gòu)對于開發(fā)人員是一個(gè)必須認(rèn)真考慮的問題。軟件架構(gòu)對于系
    的頭像 發(fā)表于 01-01 10:16 ?5432次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā)中常用的<b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)</b>

    要想成為ARM嵌入式硬件高手,你得這么做!資料下載

    電子發(fā)燒友網(wǎng)為你提供要想成為ARM嵌入式硬件高手,你得這么做!資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-18 08:41 ?15次下載
    要想成為ARM<b class='flag-5'>嵌入式</b>硬件高手,你得<b class='flag-5'>這么做</b>!資料下載

    嵌入式軟件架構(gòu)

    嵌入式軟件架構(gòu)
    發(fā)表于 10-20 20:51 ?20次下載
    <b class='flag-5'>嵌入式</b>系<b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)</b>

    嵌入式架構(gòu)師成長之路--架構(gòu)設(shè)計(jì)

    詳見微信公眾號,二進(jìn)制人生。目錄:嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn) 設(shè)計(jì)目標(biāo) 設(shè)計(jì)思路 多進(jìn)程解耦嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn)要談嵌入式
    發(fā)表于 11-03 20:21 ?31次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>架構(gòu)</b>師成長之路--<b class='flag-5'>架構(gòu)</b>設(shè)計(jì)

    嵌入式電腦主板應(yīng)該如何正確的安裝?

    嵌入式電腦主板主要應(yīng)用在各種工業(yè)場合當(dāng)中,被工業(yè)電腦所采用,而且,在使用的時(shí)候嵌入式電腦主板還可以根據(jù)需求來適應(yīng)寬溫環(huán)境,從而適應(yīng)工業(yè)環(huán)境中的各種惡劣環(huán)境,能長時(shí)間的進(jìn)行高負(fù)荷工作。那么好用的嵌入式電腦主板
    的頭像 發(fā)表于 02-10 17:55 ?1113次閱讀
    <b class='flag-5'>嵌入式</b>電腦主板<b class='flag-5'>應(yīng)該</b>如何<b class='flag-5'>正確</b>的安裝?

    詳解FreeRTOS:嵌入式軟件系統(tǒng)架構(gòu)

    目前常見的嵌入式軟件系統(tǒng)架構(gòu)有三種可以分為:輪詢系統(tǒng)架構(gòu)、前后臺(tái)系統(tǒng)架構(gòu)和多任務(wù)系統(tǒng)架構(gòu)。
    的頭像 發(fā)表于 05-04 16:40 ?2269次閱讀
    詳解FreeRTOS:<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>系統(tǒng)<b class='flag-5'>架構(gòu)</b>