如何用一個實例來探討嵌入式軟件架構設計

 1、感慨架構

近公司新招了一個作嵌入式軟件開發開發的童鞋,該童鞋是從上海的某一個上市公司出來的,由於咱們這邊人手不夠,所以把他安排了去負責一個新產品的研發,前期讓他負責加速度計、NB-IOT、舵機、外置Flash的功能測試,測試完成以後,準備讓他作一個該產品的概要設計。而後他花了2個星期的時間,給咱們寫出來一個概要設計,說實話,我看到這個概要設計,我就以爲是剛畢業的大學生寫的。框架

版本一的架構設計模塊化

2.1系統體系結構
系統分爲兩層:硬件驅動層、應用層。
2.1.1硬件驅動層
硬件驅動層包含板載硬件資源正常運行所需的全部驅動程序。
1)MCU初始化
2)I2C數據存取
3)SPI數據讀取
4)加速度計初始化
5)藍牙模塊啓動
6)BC95模塊啓動
7)485通信模塊啓動
2.2.2應用層
1)Mcu運行模式切換
2)震動及傾斜
3)數據解析
4)開/關鎖
5)數據發送
6)歷史數據保存

看到版本一的架構設計以後,說實話,我仍是第一次見到這樣來寫架構設計的,竟然是以序號來寫的,這個讓別人讀起來,特別的彆扭。  函數

版本二的架構設計測試

看到版本二的架構設計以後,雖然頗感欣慰,可是想到達到咱們所要求的,還要很大的一段距離,該架構設計,主要有如下幾點問題:spa

1.對架構的理解還不是很清晰,既然是作架構設計,那就應該從總體來看,而不是僅僅只是侷限於一個模塊,或者功能裏面。架構設計

2.仍是每一個層次的理解也還不是很清晰,好比講MCU的初始化,歸於硬件驅動層裏面。MCU的初始化,嚴格意義上來講,是屬於流程的一部分了,而不是驅動。好比電腦的開啓啓動,把這個歸於硬件的驅動裏面,確定是屬於牛頭不對馬嘴的。設計

3.還有就是各個模塊的啓動,也是不能屬於硬件驅動層的,也都是業務流程的一部分了,都不該該屬於驅動層的一部分。日誌

4.還有就是總線數據的讀寫,雖然驅動的做用也就是讀寫,可是數據總線的讀寫不能寫成硬件驅動。blog

5.應用層的系統參數初始化,也仍是屬於流程。

6.數據的解析和數據的發生,都是屬於通訊功能裏面的,不該該單獨獨立出來,屬於單個的應用。

 

看到這裏以後,說實話,我真的很驚訝,難倒從大企業出來的童鞋,能力都是這樣的嗎?從大企業出來的童鞋們,工資也是要的老高老高的,難倒他們不知道,在昆明的工資,都是以K來計算的嗎?在昆明能拿到8K的工資作開發的人就已經不多了。而後再到1W

以上的,童鞋們就更少了。

說實話,咱們的這位童鞋,上班的時候,還常常看電子書,在實習期間還常常看電子書,我不知道,他哪來的實力,心能夠放的這麼寬,交代的活沒有完成,還有時間來看電子書。固然託他的福,個人工資也終於漲到6K了,由於新人的工資,比老人高,

作的活仍是同樣的(結果一不同我就知道了),爲了考慮到老人的內心面不平衡,因此纔給我加的工資的。領導們在批加工資的申請的時候,還專門把我叫去辦公室,讓我表決心啥的。。

 

而後,我讓他去改,把我說的這些改改,而後再看一下,還有什麼問題沒?結果我看他在那抓耳撓腮,還有各類嘆氣,而後和我說,改不了。

既然改不了,那我就只能親自操刀上陣了,畢竟同事一場。

 

 2、基本框架圖

(1)架構設計的目的

一、應用的代碼邏輯清晰,且避免重複的造輪子。

二、若是沒有好的架構,移植將會是一件很痛苦的事情,所以一個好的架構設計,方便軟件的移植。

三、最大限度的複用。

四、高耦合低內聚。 

 

(2)設計思路

如何把硬件的驅動和一個功能封裝成一個個的模塊,而後能夠像小朋友搭積木一個,一個個模塊能夠快速的拼接起來,組成一個個不一樣的模型。

咱們的嵌入式架構思路也是來源於此,即功能模塊化設計、分層設計。

這個設計和WEB開發的MVC模式相似,都是注重分層設計。

 

模塊化設計:將收集到的需求,進行歸類,總結和分析,將這些需求歸納爲一個個單獨的功能,每個功能,作成一個單獨的功能模塊。

分層設計一句話很差直接表達,其主要體如今一下幾方面:

一、功能模塊對外調用的模塊封裝成一個個API,將底層驅動作個API以供功能模塊調用。(各個功能模塊能夠獨立編譯(如通訊模塊純ANSI C,可在任意平臺複用),或者調用驅動層接口(日誌庫模塊調用了驅動讀寫Flash),總而言之,言而總之,封裝出各個功能獨立的可複用的功能模塊。)

二、API分爲驅動層API和應用層API,而不是全部程序都調用驅動層API。(整個應用中都調用驅動層API會致使應用中驅動調用隨處可見,沒法移植和最大限度的複用)

 

整體分 硬件驅動層-->功能模塊層-->業務邏輯層-->應用層

整體結構示意框圖:

說明:

1.層與層之間不能跨層調用。

2.模塊與模塊各自獨立,無依賴關係。

3.模塊提供統一的接口供上層調用,模塊的內外接口分明。

4.模塊的功能只能增,不能改。

5.各個功能模塊層也還能夠進行繼續分層,好比接口層、驅動層、硬件層。

 

(3)模塊層次說明

硬件驅動層

硬件驅動層包含板載硬件資源正常運行所需的全部驅動程序並提供API給功能模塊調用。

功能模塊層

功能模塊層包括實現具體功能的函數,經過調用驅動層API實現相應功能,同時提供可調用的API給業務邏輯層。

業務邏輯層

業務邏輯層包括產品總體功能的各個業務流程,經過調用功能模塊層的API實現。

應用層

應用層將各個業務邏輯進行整合調用,完成整個產品的功能。

 

(4)優點

若是驅動變更了,或者換不一樣平臺,只需更改驅動層,應用層不受影響。

若是功能模塊變更了,只需升級相應的功能模塊,其餘的模塊不受影響,應用層也不受影響。

按照這種邏輯設計好以後,主要的工做就是在業務邏輯層。應用層則爲程序的整體流程和框架,主要調用業務邏輯層實現不一樣的功能。

相關文章
相關標籤/搜索