軟件架構-嵌入式微系統連載之五
嵌入式微系統架構是C#與CMSIS架構的復合體,如下圖所示:
本文引用地址:http://dyxdggzs.com/article/262755.htm

基于C#標準,分為應用層App與系統層System兩層。采用兩個(gè)大結構體AppStruct和SystemStruct把它們各自封裝起來(lái)。

Appstruct里封裝了兩個(gè)結構體:Data和Menu。兩者都是應用層的數據類(lèi)型。
Data是應用層業(yè)務(wù)邏輯所涉及的傳感器、驅動(dòng)器等全局變量、過(guò)程變量、存儲參數、設置參數等數據,Data結構體類(lèi)似數據庫概念,只是嵌入式系統數據一般不大,用一個(gè)結構體實(shí)現即可。
Menu是應用層需要的各種菜單顯示頁(yè)面,一個(gè)頁(yè)面下可以加載多種控件,比如背景文字(BackText)、表(Chart)、標簽(Label)和文本(TextBox)四種。目前版本msOS因為主要針對工控,支持本地支持黑白字庫屏,所以只需要這四種控件即可,菜單結構相對簡(jiǎn)單,今后需要支持黑白點(diǎn)陣屏甚至是彩屏,需要支持的控件就更多了。
AppStruct可以認為是應用層App的數據庫,里面包含了業(yè)務(wù)邏輯的數據庫和菜單界面顯示的各個(gè)頁(yè)面?;谶@種結構體封裝的好處在于把全局變量統一到數據庫中管理,尤其是業(yè)務(wù)邏輯中的全局變量都放到Data區中統一管理,這充分的利用了全局變量的使用便利性,又有效的避免全局變量滿(mǎn)天飛,解決了長(cháng)期以來(lái)引起極大爭議的全局變量問(wèn)題。
應用層分為三塊,除了數據庫意思的AppStruct外,還有業(yè)務(wù)邏輯(Logic)及菜單界面(Menu),兩者分別跟工業(yè)自動(dòng)化控制系統的可編程控制器(PLC)和組態(tài)屏(HMI)對應。在工業(yè)自動(dòng)化中,PLC內部有業(yè)務(wù)邏輯參數存儲單元,HMI內部有菜單頁(yè)面存儲單元,現在等價(jià)于把PLC和HMI的存儲單元合并在A(yíng)ppStruct中來(lái)管理。
業(yè)務(wù)邏輯(Logic)響應各種傳感器過(guò)來(lái)的信息,通過(guò)給定的算法或操作流程,及時(shí)指揮驅動(dòng)器工作,所以需要設定在較高優(yōu)先級的任務(wù)中。菜單界面(Menu)顯示業(yè)務(wù)邏輯處理過(guò)程中需要顯示的各種參數,只需要滿(mǎn)足眼睛的刷新頻率即可,所以刷新速度相對較慢,一般放在最低優(yōu)先級任務(wù)中處理。需要注意的是,菜單界面不包括按鍵部分,按鍵產(chǎn)生按鍵消息,歸入業(yè)務(wù)邏輯中,菜單界面只是顯示各種參數,而不會(huì )去修改參數,這個(gè)保證了數據庫只被業(yè)務(wù)邏輯一個(gè)任務(wù)修改,避免了一個(gè)數據同時(shí)被多個(gè)任務(wù)修改產(chǎn)生錯誤的問(wèn)題。

SystemStruct封裝了整個(gè)底層系統,抽象成一個(gè)面向應用的接口芯片。
Initialize為初始化函數,在系統應用前,必須要先初始化。
Device結構體中封裝了各類(lèi)設備,比如LCD、ADC、USART、IO、Timer等。
OS中封裝了uC/OS-II的各種常用接口函數。
Gui中封裝了界面處理接口。
AppStruct和SystemStruct都是一個(gè)自定義的結構體類(lèi)型,需要用這兩個(gè)類(lèi)型定義一個(gè)對象。

定義應用層結構體。
定義系統層結構體。需要注意的是,因為采用結構體模擬類(lèi)功能,System在定義的時(shí)候就指定了System的Initialize初始化函數,這樣系統開(kāi)始就可以使用System.Initialize功能,便于形式上的完美。
一個(gè)System結構體,封裝了整個(gè)系統層,中間件接口及設備接口,都在System中體現,等價(jià)于一個(gè)面向于應用層的處理器,App運行于系統層之上,App只需要調用System中的接口即可,簡(jiǎn)單、易用,這樣設計做到了跟實(shí)際的芯片無(wú)關(guān)性,比較容易跨平臺,當需要更換芯片的時(shí)候,只需要保證System接口一致,應用層無(wú)需修改代碼。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評論