1. 程式人生 > >我的嵌入式軟體開發框架淺見

我的嵌入式軟體開發框架淺見

因主要是從事應用軟體開發,現在講的是嵌入式應用軟體框架。一般好的程式框架,不單單只是應用軟體的框架,是一個系統的。如linux系統架構,由於本人才疏學淺只能自我編寫個應用程式的淺見。

1.需要有分離分層的思想,前期規劃可能較為複雜,但後期維護極為方便。總體劃分:硬體/協議層-->介面管理層-->業務邏輯層

硬體/協議層需要抽象出相應的介面,作為介面管理層或是業務邏輯層根本不關心底層實現。

如現在支援終端輸入,要新增鍵盤,將來還可能接入紅外,還有可能接入觸控式螢幕。應該怎麼架構呢?

設計輸入資料結構如下:


大致如下:input_manager.c為輸入管理層,管理註冊的各個子輸入。

業務邏輯層只需要GetInputEvent獲取各個輸入事件。這方面linux底層做的很好。

2.要有模組化和產品思想。模組功能要劃分清晰。程序執行緒之間通訊要架構清晰,各個模組提供互動的介面

例如ui主要從事配置和檢視資料,和進行較為簡單的業務邏輯。若要使用ui進行較為複雜的業務處理,使用ui與底層分離的。ui可以與底層共用配置、共用同一份資料庫,通過程序間通訊與底層進行互動,底層程式單獨成套。可供使用者選擇不帶顯示屏的web配置,web與底層互動的介面儘量與ui保持一致。

框架需要要實現一些常用的封裝:

常用功能封裝:實現工具類,和幫助類,同時要儲存好,(耦合性低)以後開發直接拿出來用。

如自定義彈出框、日誌類、系統命令封裝等。

.實現定時器任務。至少要支援立即傳送或迴圈傳送,傳送幾次等。很多業務功能實現的過程中,有好多地方會用到定時器,比如某個資料需要定時傳送,而有的資料只需要定時傳送幾次等;

如.執行緒池封裝。經常會需要啟動一個臨時執行緒,處理的資料結束之後就自己退出,自動回收資源。其實這個的封裝,也是為了業務程式碼書寫的時候不用再去寫執行緒相關打一堆api和引數。

資料處理框架:這個功能是處理基礎資料用的框架,基本思想上註冊回撥機制,有了它,業務程式碼裡就不會再出現長長的switch……case了。

事件狀態管理框架(業務處理框架):這個功能上用於管理系統內部的狀態,基本思想上訂閱釋出機制(也稱觀察者模式),有了它,程式碼就不用再去請求一堆狀態資料了,只需要把你關注打事件或者狀態註冊一下,當事件發生時,就主動通知給你了。

基本就以上幾個部分,基於這些年的開發經驗,感覺嵌入式上的程式模組分三類:

1. 基礎資料採集模組; 

提供支援系統業務功能的基礎資料,比如導航裝置,GPS資料採集的程式可以算這一類。按上述事項,同樣只引出資料類介面。


2. 業務資料處理模組。

3. 輔助模組
這部分主要是給業務資料處理模組提供一些輔助功能,比如:資料/引數儲存等模組,也就是這些模組是其使用者請求什麼他就返回什麼,自身不具有複雜的邏輯處理。


分離關注點,消除重複。

這短短打兩句話,蘊含了多少程式設計世界的哲學!

其中包含程式設計原則,也包含設計模式的思想,還有程式碼重構的思想!

最後上傳份最近寫的程式碼框架:

https://download.csdn.net/download/mingting1323/10372393。

介面與後臺程式分離分層。 
採用模組化思想封裝裝各個模組,除配置外只使用了個全域性變數。
含有gps,
語音模組
v4l2視訊模組
定時器執行緒