王居儒,莫國(guó)民
在傳統(tǒng)的X線機(jī)控制臺(tái)軟件開(kāi)發(fā)中,將代碼與數(shù)據(jù)混合編寫(xiě)。一旦X線機(jī)控制臺(tái)的參數(shù)需要修改或者業(yè)務(wù)邏輯需要修改,都要重新編譯程序,燒寫(xiě)到芯片中。形成了維護(hù)困難,升級(jí)繁瑣等特征。為了解決這個(gè)問(wèn)題,采用了將代碼和數(shù)據(jù)分離的方式進(jìn)行設(shè)計(jì)。在Flash中,將Flash進(jìn)行分區(qū)管理,分別存儲(chǔ)片外代碼和數(shù)據(jù)。需要修改參數(shù)時(shí),只需更新Flash中數(shù)據(jù)部分。需要修改代碼時(shí),只需更新代碼部分。這種模式的采用使系統(tǒng)維護(hù)方便,升級(jí)簡(jiǎn)易,提高了整個(gè)系統(tǒng)的可維護(hù)性,提高了系統(tǒng)的效率。
將系統(tǒng)做成中斷觸發(fā)方式,主程序處于閉合循環(huán)中,等待中斷的發(fā)生。中斷采用優(yōu)先級(jí)方式進(jìn)行處理。
將圖形界面顯示分為屏幕,窗口,語(yǔ)句,字符的逐級(jí)方式。使顯示程序和顯示內(nèi)容分開(kāi),可以方便的增加,刪除需要顯示的屏幕信息。
MVC是一種面向?qū)ο笏枷氲拈_(kāi)發(fā)模式。是Model-View-Controller的縮寫(xiě)。
圖1 MVC架構(gòu)
(1)Model(模型)
Model表示數(shù)據(jù)和業(yè)務(wù)模型部分,是整個(gè)系統(tǒng)中的核心部分。Model采用面向?qū)ο蟮乃枷?,將現(xiàn)實(shí)世界的對(duì)象抽象成為應(yīng)用程序里的對(duì)象,通常一方面封裝了這些對(duì)象的屬性,另一方面封裝了對(duì)數(shù)據(jù)的存儲(chǔ)和隱含的業(yè)務(wù)邏輯。
(2)View(視圖)
View表示用戶視圖部分,是用戶看到的與之交互的界面。其中并沒(méi)有真正的處理發(fā)生,視圖只是作為一種輸出數(shù)據(jù)并供用戶選擇操作的方式。
(3)Controller(控制器)
Controller表示流程控制部分。它調(diào)用相應(yīng)模型或試圖來(lái)完成用戶的要求,是Model與View之間的樞紐。具體而言,一方面,它能解析和傳遞View輸入的數(shù)據(jù),將其轉(zhuǎn)化成系統(tǒng)能夠識(shí)別的對(duì)象,識(shí)別用戶的操作,解釋成對(duì)Model特定方法的調(diào)用。另一方面,對(duì)Model執(zhí)行的結(jié)果和View事件,能夠調(diào)用相應(yīng)的View來(lái)反饋用戶。
圖2 程序架構(gòu)圖
如圖2所示,將所有業(yè)務(wù)邏輯封裝于主程序中,數(shù)據(jù)存儲(chǔ)在FLASH中。通過(guò)用戶的輸入請(qǐng)求,控制器對(duì)該請(qǐng)求做出響應(yīng),調(diào)用響應(yīng)控制程序,讀寫(xiě)FLASH數(shù)據(jù),將結(jié)果反饋給試圖。采用了典型的MVC架構(gòu),將業(yè)務(wù)邏輯和數(shù)據(jù)完全分離。使系統(tǒng)維護(hù),更新非常方便,高效。
圖3 控制臺(tái)業(yè)務(wù)邏輯
如圖3所示,X線機(jī)控制臺(tái)主要業(yè)務(wù)邏輯包括了6個(gè)模塊。控制臺(tái)主模塊負(fù)責(zé)輪詢等待,中斷觸發(fā)。鍵盤(pán)模塊負(fù)責(zé)用戶按鍵掃描,判斷鍵值。內(nèi)部記憶模塊負(fù)責(zé)讀寫(xiě)NVRAM。外部存儲(chǔ)模塊,負(fù)責(zé)讀寫(xiě)FLASH。顯示模塊負(fù)責(zé)將需要顯示的數(shù)據(jù)寫(xiě)入顯存。通訊模塊負(fù)責(zé)與PC及邏輯板進(jìn)行通訊。
1.通過(guò)鍵盤(pán)得到服務(wù)。
2.得到鍵值后產(chǎn)生相應(yīng)的操作。
3.操作(讀取數(shù)據(jù),顯示數(shù)據(jù),數(shù)據(jù)通訊等)。如圖4所示:
圖4 軟件工作原理
控制臺(tái)軟件設(shè)計(jì)采用典型的MVC設(shè)計(jì)方式,將數(shù)據(jù)部分和邏輯部分完全獨(dú)立。數(shù)據(jù)部分存儲(chǔ)在Flash中,將整個(gè)程序中用到的數(shù)據(jù)進(jìn)行分類和從屬關(guān)系分析,進(jìn)行數(shù)據(jù)庫(kù)建模,存儲(chǔ)在上位機(jī)數(shù)據(jù)庫(kù)中,通過(guò)上位機(jī)軟件與控制臺(tái)軟件通訊,將數(shù)據(jù)寫(xiě)入Flash。這種數(shù)據(jù)和邏輯獨(dú)立的開(kāi)發(fā)模式,對(duì)于數(shù)據(jù)的擴(kuò)展和修改以及程序的擴(kuò)展和修改提供了方便。
以一個(gè)屏幕信息存儲(chǔ)的例子來(lái)具體描述這種數(shù)據(jù)存儲(chǔ)設(shè)計(jì),一個(gè)屏幕的信息包含多個(gè)窗體,一個(gè)窗體包含多個(gè)語(yǔ)句,一個(gè)語(yǔ)句包含多個(gè)字符,對(duì)于上面的這個(gè)數(shù)據(jù)關(guān)系定義為如圖5所示:
圖5 屏幕信息存儲(chǔ)
首先得到屏幕的ID號(hào),從而得到屏幕中包含的窗體的ID號(hào),通過(guò)窗體的ID號(hào),得到窗體中對(duì)應(yīng)的多個(gè)語(yǔ)句的ID號(hào),通過(guò)語(yǔ)句的ID號(hào),可以得到對(duì)應(yīng)字符的ID號(hào),通過(guò)字符的ID號(hào)可以得到字符對(duì)應(yīng)的點(diǎn)陣信息。
在軟件的實(shí)現(xiàn)過(guò)程中,很重要的一部分是程序需要的數(shù)據(jù)如何組織,如何管理,在這里主要描述了Flash中數(shù)據(jù)的組織和管理。Flash的地址分配如表1所示:
表1 Flash地址分配
FAT區(qū)存放的內(nèi)容包括數(shù)據(jù)表存放地址的指針,表中一條記錄的大小,表的總記錄數(shù),表的記錄標(biāo)志。
Table區(qū)存放內(nèi)容包括各個(gè)表的屬性值,如果該表包含字符串信息,存放字符串的指針地址。
String區(qū)存放字符串信息,包括語(yǔ)句,字符,點(diǎn)陣等信息。
Flash存儲(chǔ)結(jié)構(gòu)如圖6所示:
圖6 FLASH結(jié)構(gòu)
在業(yè)務(wù)邏輯讀寫(xiě)數(shù)據(jù)的時(shí)候,首先找到FAT區(qū)中相應(yīng)的Table指針,根據(jù)Table指針以及偏移量得到想要的Table數(shù)據(jù)。如果是要讀寫(xiě)相應(yīng)Table對(duì)應(yīng)的String,在Table中得到String的地址指針,從而完成String的尋址。
這種設(shè)計(jì)很好的實(shí)現(xiàn)了上位機(jī)數(shù)據(jù)庫(kù)表關(guān)系在Flash中的存儲(chǔ)實(shí)現(xiàn)。是一種在嵌入式系統(tǒng)開(kāi)發(fā)中,在Flash中建立關(guān)系數(shù)據(jù)庫(kù)對(duì)應(yīng)表結(jié)構(gòu)的一種有效方法??梢栽陬愃频拈_(kāi)發(fā)中擴(kuò)展應(yīng)用。
在嵌入式系統(tǒng)開(kāi)發(fā)中成功使用MVC架構(gòu),使嵌入式系統(tǒng)的業(yè)務(wù)邏輯和數(shù)據(jù)完全分離。同時(shí),數(shù)據(jù)組織按照關(guān)系數(shù)據(jù)庫(kù)模式進(jìn)行Flash映射。讀寫(xiě)Flash數(shù)據(jù)高效快速。MVC架構(gòu)的設(shè)計(jì)是構(gòu)筑軟件非常好的基本模式,MVC使降低開(kāi)發(fā)和維護(hù)用戶接口的技術(shù)含量成為可能。開(kāi)發(fā)時(shí)間會(huì)得到相當(dāng)大的縮減。結(jié)合MVC模式,采用上位機(jī)數(shù)據(jù)庫(kù)映射Flash方法,使業(yè)務(wù)邏輯和數(shù)據(jù)完全分離。同時(shí),數(shù)據(jù)組織具有關(guān)系數(shù)據(jù)庫(kù)特征??梢愿咝Э焖俚膶ぶ贰>C上所述,使我們感受到了MVC模式帶給我們的種種好處:降低軟件的數(shù)據(jù)表達(dá)、應(yīng)用邏輯和數(shù)據(jù)存儲(chǔ)等各部分的耦合程度,提高了軟件的可重用性,減少了其維護(hù)成本等等。
[1](加)澤雷爾(Zurell,K)著;艾可武等譯.嵌入式系統(tǒng)的C程序設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2001(10).
[2]謝新武.一種基于PC的X線機(jī)控制臺(tái)設(shè)計(jì)[J].醫(yī)療衛(wèi)生裝備,2008(7).
[3]劉慧琴.基于VB的X線機(jī)控制臺(tái)虛擬操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)醫(yī)療器械雜志,2008(5).
[4]李伯成.單片機(jī)及嵌入式系統(tǒng),[M]清華大學(xué)出版社,2005(2).
[5](美)Jim Ledin著;駱麗譯.嵌入式控制系統(tǒng)及其C/C++實(shí)現(xiàn),[M]北京航空航天大學(xué)出版社,2005(4).
[6]李榮正.PIC單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2005(1).