新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 軟件架構(gòu)-嵌入式微系統(tǒng)連載之五

軟件架構(gòu)-嵌入式微系統(tǒng)連載之五

作者: 時(shí)間:2014-09-10 來源:網(wǎng)絡(luò) 收藏

  架構(gòu)是C#與架構(gòu)的復(fù)合體,如下圖所示:

本文引用地址:http://www.butianyuan.cn/article/262755.htm

  

 

  基于C#標(biāo)準(zhǔn),分為應(yīng)用層App與系統(tǒng)層System兩層。采用兩個(gè)大結(jié)構(gòu)體AppStruct和SystemStruct把它們各自封裝起來。

  

 

  Appstruct里封裝了兩個(gè)結(jié)構(gòu)體:Data和Menu。兩者都是應(yīng)用層的數(shù)據(jù)類型。

  Data是應(yīng)用層業(yè)務(wù)邏輯所涉及的傳感器、驅(qū)動(dòng)器等全局變量、過程變量、存儲(chǔ)參數(shù)、設(shè)置參數(shù)等數(shù)據(jù),Data結(jié)構(gòu)體類似數(shù)據(jù)庫概念,只是嵌入式系統(tǒng)數(shù)據(jù)一般不大,用一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)即可。

  Menu是應(yīng)用層需要的各種菜單顯示頁面,一個(gè)頁面下可以加載多種控件,比如背景文字(BackText)、表(Chart)、標(biāo)簽(Label)和文本(TextBox)四種。目前版本msOS因?yàn)橹饕槍?duì)工控,支持本地支持黑白字庫屏,所以只需要這四種控件即可,菜單結(jié)構(gòu)相對(duì)簡單,今后需要支持黑白點(diǎn)陣屏甚至是彩屏,需要支持的控件就更多了。

  AppStruct可以認(rèn)為是應(yīng)用層App的數(shù)據(jù)庫,里面包含了業(yè)務(wù)邏輯的數(shù)據(jù)庫和菜單界面顯示的各個(gè)頁面?;谶@種結(jié)構(gòu)體封裝的好處在于把全局變量統(tǒng)一到數(shù)據(jù)庫中管理,尤其是業(yè)務(wù)邏輯中的全局變量都放到Data區(qū)中統(tǒng)一管理,這充分的利用了全局變量的使用便利性,又有效的避免全局變量滿天飛,解決了長期以來引起極大爭議的全局變量問題。

  應(yīng)用層分為三塊,除了數(shù)據(jù)庫意思的AppStruct外,還有業(yè)務(wù)邏輯(Logic)及菜單界面(Menu),兩者分別跟工業(yè)自動(dòng)化控制系統(tǒng)的可編程控制器(PLC)和組態(tài)屏(HMI)對(duì)應(yīng)。在工業(yè)自動(dòng)化中,PLC內(nèi)部有業(yè)務(wù)邏輯參數(shù)存儲(chǔ)單元,HMI內(nèi)部有菜單頁面存儲(chǔ)單元,現(xiàn)在等價(jià)于把PLC和HMI的存儲(chǔ)單元合并在AppStruct中來管理。

  業(yè)務(wù)邏輯(Logic)響應(yīng)各種傳感器過來的信息,通過給定的算法或操作流程,及時(shí)指揮驅(qū)動(dòng)器工作,所以需要設(shè)定在較高優(yōu)先級(jí)的任務(wù)中。菜單界面(Menu)顯示業(yè)務(wù)邏輯處理過程中需要顯示的各種參數(shù),只需要滿足眼睛的刷新頻率即可,所以刷新速度相對(duì)較慢,一般放在最低優(yōu)先級(jí)任務(wù)中處理。需要注意的是,菜單界面不包括按鍵部分,按鍵產(chǎn)生按鍵消息,歸入業(yè)務(wù)邏輯中,菜單界面只是顯示各種參數(shù),而不會(huì)去修改參數(shù),這個(gè)保證了數(shù)據(jù)庫只被業(yè)務(wù)邏輯一個(gè)任務(wù)修改,避免了一個(gè)數(shù)據(jù)同時(shí)被多個(gè)任務(wù)修改產(chǎn)生錯(cuò)誤的問題。

  

 

  SystemStruct封裝了整個(gè)底層系統(tǒng),抽象成一個(gè)面向應(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都是一個(gè)自定義的結(jié)構(gòu)體類型,需要用這兩個(gè)類型定義一個(gè)對(duì)象。

  

 

  定義應(yīng)用層結(jié)構(gòu)體。

  定義系統(tǒng)層結(jié)構(gòu)體。需要注意的是,因?yàn)椴捎媒Y(jié)構(gòu)體模擬類功能,System在定義的時(shí)候就指定了System的Initialize初始化函數(shù),這樣系統(tǒng)開始就可以使用System.Initialize功能,便于形式上的完美。

  一個(gè)System結(jié)構(gòu)體,封裝了整個(gè)系統(tǒng)層,中間件接口及設(shè)備接口,都在System中體現(xiàn),等價(jià)于一個(gè)面向于應(yīng)用層的處理器,App運(yùn)行于系統(tǒng)層之上,App只需要調(diào)用System中的接口即可,簡單、易用,這樣設(shè)計(jì)做到了跟實(shí)際的芯片無關(guān)性,比較容易跨平臺(tái),當(dāng)需要更換芯片的時(shí)候,只需要保證System接口一致,應(yīng)用層無需修改代碼。

c語言相關(guān)文章:c語言教程




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉