嵌入式软件分层
首先需要說明為什么要分層?這樣做會有什么好處?
? ?解耦:通過代碼分層實現“高內聚”和“低耦合”,每個層、模塊間在功能上獨立
? ?擴展性/可維護性強:因為各層及模塊間功能相互獨立,沒有嚴格依賴關系,所以它的擴展性/可維護性比較強
? ?移植性:每一層都實現指定功能,與其他模塊通過指定接口建立聯系,所以移植起來比較方便
? ?問題簡單化:通過功能逐步細化,可以把復雜的功能簡單化,簡化代碼實現
? ?復用性強:因為各模塊功能相互獨立且可相互調用,所以代碼復用性較強
三層架構介紹
? ?三層架構是一個比較典型的分層思想,它們分別是:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
? ?表現層: 實現了和用戶交互的功能,比如一些數據或者界面的交互
? ?業務邏輯層:這是整個系統的核心,所有的邏輯判斷以及數據處理都在這一層實現
? ?數據訪問層:實現了數據存儲和讀取,比如數據庫的增、刪、查、改
由三層架構設計嵌入式分層
? ?嵌入式開發的核心就是芯片,它提供固定的片內資源共開發者使用。而且它具有一個很重要的特點就是,不隨項目的需求變動而變動。所以應將其作為最底層,為上層提供基礎支持。我們將其命名為 硬件抽象層(Hardware Abstract Layer)
? ?芯片有了當然還不夠,通常我們會在片外擴展一些功能模塊來滿足具體的項目需求,例如:傳感器、鍵盤、LCD屏、片外存儲等。這一層的特點是,隨項目的變動而以模塊為單位動態增減。這一層的運作需要芯片內部資源的支持,所以應處于硬件抽象層之上,并為上層調用。我們將其命名為擴展外設層(Expand Peripherals Layer)
? ?根據嵌入式產品的特點和三層架構的結合分析,可得到嵌入式代碼框架分層結構如下:
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?應用接口層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?邏輯處理層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * * ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? * ? ? ? ? ?擴展外設層 ? ? ? ?*
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?硬件抽象層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
硬件抽象層:屏蔽對SFR的操作細節,為上層提供簡單、清晰的應用接口
擴展外設層:根據項目需求可以動態增加或去掉這一層的功能模塊單元
note:硬件抽象層和擴展外設層包括了整個系統涉及到的硬件單元模塊,我們在封裝這部分模塊功能接口時需要嚴格區分它們之間的界限。每個單元之間都必須做到完全獨立的狀態,分別實現模塊需要對外提供的最基本的功能接口。如果在整個系統中模塊之間有相互調用的邏輯,必須通過上層代碼“間接”調用,避免底層模塊之間的耦合
邏輯處理層:整個系統的邏輯/數據處理都在這里,是整個系統的核心。這層的效率和穩定性也直接影響了系統性能,所以無論是概要設計/詳細設計/代碼實現,每個環節都需要著重處理這部分。
應用接口層:負責和應用層成交互,提供功能接口。
設計原則:
1.下層只需為上層提供調用接口,不能有邏輯上耦合關系。另外在調用下層接口時,也最好通過異步調用方式解耦
2.每一層或每一個功能模塊都要以“高內聚”、“低耦合”為理念
3.下層接口需要對上層屏蔽自己的實現細節
? ?解耦:通過代碼分層實現“高內聚”和“低耦合”,每個層、模塊間在功能上獨立
? ?擴展性/可維護性強:因為各層及模塊間功能相互獨立,沒有嚴格依賴關系,所以它的擴展性/可維護性比較強
? ?移植性:每一層都實現指定功能,與其他模塊通過指定接口建立聯系,所以移植起來比較方便
? ?問題簡單化:通過功能逐步細化,可以把復雜的功能簡單化,簡化代碼實現
? ?復用性強:因為各模塊功能相互獨立且可相互調用,所以代碼復用性較強
三層架構介紹
? ?三層架構是一個比較典型的分層思想,它們分別是:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
? ?表現層: 實現了和用戶交互的功能,比如一些數據或者界面的交互
? ?業務邏輯層:這是整個系統的核心,所有的邏輯判斷以及數據處理都在這一層實現
? ?數據訪問層:實現了數據存儲和讀取,比如數據庫的增、刪、查、改
由三層架構設計嵌入式分層
? ?嵌入式開發的核心就是芯片,它提供固定的片內資源共開發者使用。而且它具有一個很重要的特點就是,不隨項目的需求變動而變動。所以應將其作為最底層,為上層提供基礎支持。我們將其命名為 硬件抽象層(Hardware Abstract Layer)
? ?芯片有了當然還不夠,通常我們會在片外擴展一些功能模塊來滿足具體的項目需求,例如:傳感器、鍵盤、LCD屏、片外存儲等。這一層的特點是,隨項目的變動而以模塊為單位動態增減。這一層的運作需要芯片內部資源的支持,所以應處于硬件抽象層之上,并為上層調用。我們將其命名為擴展外設層(Expand Peripherals Layer)
? ?根據嵌入式產品的特點和三層架構的結合分析,可得到嵌入式代碼框架分層結構如下:
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?應用接口層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?邏輯處理層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * * ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? * ? ? ? ? ?擴展外設層 ? ? ? ?*
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? * * * * * * * * * * * * * * * *
? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? ? ? ?硬件抽象層 ? ? ? ? ? ? *
? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * * * * * * * * * * * * *
硬件抽象層:屏蔽對SFR的操作細節,為上層提供簡單、清晰的應用接口
擴展外設層:根據項目需求可以動態增加或去掉這一層的功能模塊單元
note:硬件抽象層和擴展外設層包括了整個系統涉及到的硬件單元模塊,我們在封裝這部分模塊功能接口時需要嚴格區分它們之間的界限。每個單元之間都必須做到完全獨立的狀態,分別實現模塊需要對外提供的最基本的功能接口。如果在整個系統中模塊之間有相互調用的邏輯,必須通過上層代碼“間接”調用,避免底層模塊之間的耦合
邏輯處理層:整個系統的邏輯/數據處理都在這里,是整個系統的核心。這層的效率和穩定性也直接影響了系統性能,所以無論是概要設計/詳細設計/代碼實現,每個環節都需要著重處理這部分。
應用接口層:負責和應用層成交互,提供功能接口。
設計原則:
1.下層只需為上層提供調用接口,不能有邏輯上耦合關系。另外在調用下層接口時,也最好通過異步調用方式解耦
2.每一層或每一個功能模塊都要以“高內聚”、“低耦合”為理念
3.下層接口需要對上層屏蔽自己的實現細節
4.下層為上層提供調用接口,且是單向調用。也就是說只能上層應用調用下層接口
總結
- 上一篇: Zephyr内核到1.5版本的改进
- 下一篇: 线程调度