軟件架構(gòu)-嵌入式微系統(tǒng)連載之五
嵌入式微系統(tǒng)架構(gòu)是C#與CMSIS架構(gòu)的復(fù)合體,如下圖所示:
本文引用地址:http://butianyuan.cn/article/262755.htm
基于C#標(biāo)準(zhǔn),分為應(yīng)用層App與系統(tǒng)層System兩層。采用兩個大結(jié)構(gòu)體AppStruct和SystemStruct把它們各自封裝起來。
Appstruct里封裝了兩個結(jié)構(gòu)體:Data和Menu。兩者都是應(yīng)用層的數(shù)據(jù)類型。
Data是應(yīng)用層業(yè)務(wù)邏輯所涉及的傳感器、驅(qū)動器等全局變量、過程變量、存儲參數(shù)、設(shè)置參數(shù)等數(shù)據(jù),Data結(jié)構(gòu)體類似數(shù)據(jù)庫概念,只是嵌入式系統(tǒng)數(shù)據(jù)一般不大,用一個結(jié)構(gòu)體實現(xiàn)即可。
Menu是應(yīng)用層需要的各種菜單顯示頁面,一個頁面下可以加載多種控件,比如背景文字(BackText)、表(Chart)、標(biāo)簽(Label)和文本(TextBox)四種。目前版本msOS因為主要針對工控,支持本地支持黑白字庫屏,所以只需要這四種控件即可,菜單結(jié)構(gòu)相對簡單,今后需要支持黑白點陣屏甚至是彩屏,需要支持的控件就更多了。
AppStruct可以認(rèn)為是應(yīng)用層App的數(shù)據(jù)庫,里面包含了業(yè)務(wù)邏輯的數(shù)據(jù)庫和菜單界面顯示的各個頁面?;谶@種結(jié)構(gòu)體封裝的好處在于把全局變量統(tǒng)一到數(shù)據(jù)庫中管理,尤其是業(yè)務(wù)邏輯中的全局變量都放到Data區(qū)中統(tǒng)一管理,這充分的利用了全局變量的使用便利性,又有效的避免全局變量滿天飛,解決了長期以來引起極大爭議的全局變量問題。
應(yīng)用層分為三塊,除了數(shù)據(jù)庫意思的AppStruct外,還有業(yè)務(wù)邏輯(Logic)及菜單界面(Menu),兩者分別跟工業(yè)自動化控制系統(tǒng)的可編程控制器(PLC)和組態(tài)屏(HMI)對應(yīng)。在工業(yè)自動化中,PLC內(nèi)部有業(yè)務(wù)邏輯參數(shù)存儲單元,HMI內(nèi)部有菜單頁面存儲單元,現(xiàn)在等價于把PLC和HMI的存儲單元合并在AppStruct中來管理。
業(yè)務(wù)邏輯(Logic)響應(yīng)各種傳感器過來的信息,通過給定的算法或操作流程,及時指揮驅(qū)動器工作,所以需要設(shè)定在較高優(yōu)先級的任務(wù)中。菜單界面(Menu)顯示業(yè)務(wù)邏輯處理過程中需要顯示的各種參數(shù),只需要滿足眼睛的刷新頻率即可,所以刷新速度相對較慢,一般放在最低優(yōu)先級任務(wù)中處理。需要注意的是,菜單界面不包括按鍵部分,按鍵產(chǎn)生按鍵消息,歸入業(yè)務(wù)邏輯中,菜單界面只是顯示各種參數(shù),而不會去修改參數(shù),這個保證了數(shù)據(jù)庫只被業(yè)務(wù)邏輯一個任務(wù)修改,避免了一個數(shù)據(jù)同時被多個任務(wù)修改產(chǎn)生錯誤的問題。
SystemStruct封裝了整個底層系統(tǒng),抽象成一個面向應(yīng)用的接口芯片。
Initialize為初始化函數(shù),在系統(tǒng)應(yīng)用前,必須要先初始化。
Device結(jié)構(gòu)體中封裝了各類設(shè)備,比如LCD、ADC、USART、IO、Timer等。
OS中封裝了uC/OS-II的各種常用接口函數(shù)。
Gui中封裝了界面處理接口。
AppStruct和SystemStruct都是一個自定義的結(jié)構(gòu)體類型,需要用這兩個類型定義一個對象。
定義應(yīng)用層結(jié)構(gòu)體。
定義系統(tǒng)層結(jié)構(gòu)體。需要注意的是,因為采用結(jié)構(gòu)體模擬類功能,System在定義的時候就指定了System的Initialize初始化函數(shù),這樣系統(tǒng)開始就可以使用System.Initialize功能,便于形式上的完美。
一個System結(jié)構(gòu)體,封裝了整個系統(tǒng)層,中間件接口及設(shè)備接口,都在System中體現(xiàn),等價于一個面向于應(yīng)用層的處理器,App運行于系統(tǒng)層之上,App只需要調(diào)用System中的接口即可,簡單、易用,這樣設(shè)計做到了跟實際的芯片無關(guān)性,比較容易跨平臺,當(dāng)需要更換芯片的時候,只需要保證System接口一致,應(yīng)用層無需修改代碼。
c語言相關(guān)文章:c語言教程
評論