嵌入式軟件架構(gòu)
一 感慨
近公司新招了一個(gè)做嵌入式軟件開(kāi)發(fā)開(kāi)發(fā)的童鞋,該童鞋是從上海的某一個(gè)上市公司出來(lái)的,因?yàn)槲覀冞@邊人手不夠,因此把他安排了去負(fù)責(zé)一個(gè)新產(chǎn)品的研發(fā),前期讓他負(fù)責(zé)加速度計(jì)、NB-IOT、舵機(jī)、外置Flash的功能測(cè)試,測(cè)試完成之后,準(zhǔn)備讓他做一個(gè)該產(chǎn)品的概要設(shè)計(jì)。然后他花了2個(gè)星期的時(shí)間,給我們寫出來(lái)一個(gè)概要設(shè)計(jì),說(shuō)實(shí)話,我看到這個(gè)概要設(shè)計(jì),我就覺(jué)得是剛畢業(yè)的大學(xué)生寫的。版本一的架構(gòu)設(shè)計(jì)123456789101112131415161718 | 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)開(kāi)/關(guān)鎖 ? ? ? ?5)數(shù)據(jù)發(fā)送 ? ? ? ?6)歷史數(shù)據(jù)保存 ? ? ? ? |
二、基本框架圖
(1)架構(gòu)設(shè)計(jì)的目的
1、應(yīng)用的代碼邏輯清晰,且避免重復(fù)的造輪子。2、如果沒(méi)有好的架構(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è)模塊可以快速的拼接起來(lái),組成一個(gè)個(gè)不同的模型。我們的嵌入式架構(gòu)思路也是來(lái)源于此,即功能模塊化設(shè)計(jì)、分層設(shè)計(jì)。這個(gè)設(shè)計(jì)和WEB開(kāi)發(fā)的MVC模式類似,都是注重分層設(shè)計(jì)。模塊化設(shè)計(jì):將收集到的需求,進(jìn)行歸類,總結(jié)和分析,將這些需求概括為一個(gè)個(gè)單獨(dú)的功能,每一個(gè)功能,做成一個(gè)單獨(dú)的功能模塊。分層設(shè)計(jì)一句話不好直接表達(dá),其主要體現(xiàn)在一下幾方面:1、功能模塊對(duì)外調(diào)用的模塊封裝成一個(gè)個(gè)API,將底層驅(qū)動(dòng)做個(gè)API以供功能模塊調(diào)用。(各個(gè)功能模塊可以獨(dú)立編譯(如通信模塊純ANSI C,可在任意平臺(tái)復(fù)用),或者調(diào)用驅(qū)動(dòng)層接口(日志庫(kù)模塊調(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)用隨處可見(jiàn),無(wú)法移植和最大限度的復(fù)用)總體分 硬件驅(qū)動(dòng)層-->功能模塊層-->業(yè)務(wù)邏輯層-->應(yīng)用層總體結(jié)構(gòu)示意框圖:說(shuō)明:
- 1.層與層之間不能跨層調(diào)用。
- 2.模塊與模塊各自獨(dú)立,無(wú)依賴關(guān)系。
- 3.模塊提供統(tǒng)一的接口供上層調(diào)用,模塊的內(nèi)外接口分明。
- 4.模塊的功能只能增,不能改。
- 5.各個(gè)功能模塊層也還可以進(jìn)行繼續(xù)分層,比如接口層、驅(qū)動(dòng)層、硬件層。
(3)模塊層次說(shuō)明
- 硬件驅(qū)動(dòng)層
- 功能模塊層
- 業(yè)務(wù)邏輯層
- 應(yīng)用層