嵌入式軟件架構
一 感慨
近公司新招了一個做嵌入式軟件開發(fā)開發(fā)的童鞋,該童鞋是從上海的某一個上市公司出來的,因為我們這邊人手不夠,因此把他安排了去負責一個新產品的研發(fā),前期讓他負責加速度計、NB-IOT、舵機、外置Flash的功能測試,測試完成之后,準備讓他做一個該產品的概要設計。然后他花了2個星期的時間,給我們寫出來一個概要設計,說實話,我看到這個概要設計,我就覺得是剛畢業(yè)的大學生寫的。版本一的架構設計123456789101112131415161718 | 2.1系統(tǒng)體系結構 ? ? ? ?系統(tǒng)分為兩層:硬件驅動層、應用層。 ? ? ? ?2.1.1硬件驅動層 ? ? ? ?硬件驅動層包含板載硬件資源正常運行所需的所有驅動程序。 ? ? ? ?1)MCU初始化 ? ? ? ?2)I2C數據存取 ? ? ? ?3)SPI數據讀取 ? ? ? ?4)加速度計初始化 ? ? ? ?5)藍牙模塊啟動 ? ? ? ?6)BC95模塊啟動 ? ? ? ?7)485通訊模塊啟動 ? ? ? ?2.2.2應用層 ? ? ? ?1)Mcu運行模式切換 ? ? ? ?2)震動及傾斜 ? ? ? ?3)數據解析 ? ? ? ?4)開/關鎖 ? ? ? ?5)數據發(fā)送 ? ? ? ?6)歷史數據保存 ? ? ? ? |
二、基本框架圖
(1)架構設計的目的
1、應用的代碼邏輯清晰,且避免重復的造輪子。2、如果沒有好的架構,移植將會是一件很痛苦的事情,因此一個好的架構設計,方便軟件的移植。3、最大限度的復用。4、高耦合低內聚。(2)設計思路
如何把硬件的驅動和一個功能封裝成一個個的模塊,然后可以像小朋友搭積木一個,一個個模塊可以快速的拼接起來,組成一個個不同的模型。我們的嵌入式架構思路也是來源于此,即功能模塊化設計、分層設計。這個設計和WEB開發(fā)的MVC模式類似,都是注重分層設計。模塊化設計:將收集到的需求,進行歸類,總結和分析,將這些需求概括為一個個單獨的功能,每一個功能,做成一個單獨的功能模塊。分層設計一句話不好直接表達,其主要體現在一下幾方面:1、功能模塊對外調用的模塊封裝成一個個API,將底層驅動做個API以供功能模塊調用。(各個功能模塊可以獨立編譯(如通信模塊純ANSI C,可在任意平臺復用),或者調用驅動層接口(日志庫模塊調用了驅動讀寫Flash),總而言之,言而總之,封裝出各個功能獨立的可復用的功能模塊。)2、API分為驅動層API和應用層API,而不是所有程序都調用驅動層API。(整個應用中都調用驅動層API會導致應用中驅動調用隨處可見,無法移植和最大限度的復用)總體分 硬件驅動層-->功能模塊層-->業(yè)務邏輯層-->應用層總體結構示意框圖:說明:
- 1.層與層之間不能跨層調用。
- 2.模塊與模塊各自獨立,無依賴關系。
- 3.模塊提供統(tǒng)一的接口供上層調用,模塊的內外接口分明。
- 4.模塊的功能只能增,不能改。
- 5.各個功能模塊層也還可以進行繼續(xù)分層,比如接口層、驅動層、硬件層。
(3)模塊層次說明
- 硬件驅動層
- 功能模塊層
- 業(yè)務邏輯層
- 應用層