嵌入式軟體架構設計-模組化

2022-06-27 12:04:42

1 前言

模組化程式設計是指在進行程式設計時將一個大程式按照功能劃分為若干小程式模組,每個小程式模組完成一個確定的功能,並在這些模組之間建立必要的聯絡,通過模組的互相共同作業完成整個功能的程式設計方法。

比如搭積木,可以用一個個積木模組組合成我們想要的任何樣子,而且通過使用相同的積木模組組合成不同的樣子

2 為何模組化

為什麼要模組化程式設計?那就需要從程式模組化的好處說起!只有瞭解了其優點,才能更好的實現模組化程式設計。

  1. 降低程式設計的複雜度

有利於程式的設計和偵錯,功能相對獨立,結構清晰;主要是封裝實現細節,提供使用介面即可

  1. 提供程式碼的複用性

現成的程式程式碼,直接移植到另一個專案中簡單修改甚至不用修改就能使用,多個模組程式組合就完成了一個新的功能;這也是模組化最大的意義所在

  1. 便於功能維護和擴充套件

一旦出現問題,能迅速定位哪個模組出現的問題

  1. 程式的結構一目瞭然

可以看出程式中使用了哪些驅動、有哪些外設模組、大概有哪些功能等

  1. 保證系統穩定性

該模組程式已通過之前的專案經過反覆驗證,穩定性高,在新專案中移植比重寫更穩定

  1. 有利於團隊開發

各模組之間功能獨立,有利於任務分解,團隊分工,各自實現對應的功能,並且可以單獨進行測試驗證

3 如何拆分模組

基本思路是自頂向下、逐步分解、分而治之,即將一個較大的程式按照功能分割成一些小模組;比如手持遙控器,主要功能就是人機互動,可能還會有引數設定等,那麼依次往下分解得到以下模組:

在拆分模組時應該注意以下幾個主要原則:

  1. 模組獨立

模組的獨立性原則表現在模組完成獨立的功能,與其他模組的聯絡應該儘可能得簡單,各個模組具有相對的獨立性。

  1. 模組的規模要適當

模組的規模不能太大,也不能太小。如果模組的功能太強,可讀性就會較差,若模組的功能太弱,就會有很多的介面。開發者需要通過較多的程式設計來進行經驗的積累。

  1. 分解模組時要注意層次

在進行多層次任務分解時,要注意對問題進行抽象化。在分解初期,可以只考慮大的模組,在中期,再逐步進行細化,分解成較小的模組進行設計。

  1. 不對外開放全域性變數

模組內部使用的全域性變數,需要外部修改或者獲取時,需要通過封裝成 API 函數對外提供,同時可以在函數內有相關限制,防止外部直接操作模組內部的全域性變數引發模組執行異常,因此模組內部的全域性變數可定義為靜態全域性變數。

4 如何理解

通常一個模組就是一個.c 檔案和一個.h 檔案的結合,標頭檔案(.h)中是對於該模組介面的宣告

  1. 該模組的.c檔案實現具體功能,而.h檔案則為該功能模組的介面函數等

  2. 一個大模組中也會存在多個小模組,即模組中存在多個.c和.h檔案,每個.c和.h作用各不相同

  3. 一個.c 檔案必須一個對應的.h檔案,而.h檔案不一定需要對應的.c 檔案

 

比如實現一個OLED驅動模組,可能會有以下的檔案:

  • oled.c 和 oled.h

實現具體功能,如清屏、畫圖、字元顯示等;.h 檔案對外提供 API 介面函數

  • oledio.c 和 oledio.h

實現底層介面初始化和通訊(IIC或SPI),為oled.c檔案提供驅動介面

  • oledconf.c 和 oledconf.h

驅動設定, 如字型大小、解析度等設定資訊

  • fontxxx.h 和 bmpxxx.h

用來存放字型和BMP圖形點陣資料