摘 要: 目前,,嵌入式支付應用開發(fā)受到硬件開發(fā)板不足、燒片時間長,、調(diào)試不方便等因素影響,,面臨著應用開發(fā)周期長的問題,。為了解決以上問題,,研究了某個嵌入式支付系統(tǒng),,并在Windows環(huán)境下開發(fā)了該嵌入式支付系統(tǒng)對應的嵌入式支付系統(tǒng)模擬器。所開發(fā)的嵌入式支付模擬器基于軟件模擬硬件功能的基本思想,,通過Windows現(xiàn)有API對嵌入式支付系統(tǒng)的基礎系統(tǒng)進行模擬,;在保持對外接口不變、模擬函數(shù)功能的原則下,,對驅(qū)動程序進行模擬,;擴展資源工具,實現(xiàn)中間層的移植,;通過配置文件,,解決了模擬器適用于不同機型的問題,并且實現(xiàn)了人機交互界面的輸入和輸出,;通過動態(tài)鏈接庫(Dynamic Link Library,,DLL)隔離、宏隔離以及區(qū)域隔離,,解決Windows相關API隔離,。
關鍵詞: 嵌入式;模擬器,;系統(tǒng)模擬,;驅(qū)動模擬
0 引言
隨著生活水平的提高和社會的發(fā)展,人們對電子產(chǎn)品的需求也越來越大,,這大大促進了嵌入式系統(tǒng)產(chǎn)業(yè)迅速發(fā)展壯大,。無論是銀行取錢的ATM(Automated Tellermachine,自動取款機),,還是通信使用的手機,,甚至是日常小朋友玩的智能玩具中的一塊小芯片都離不開嵌入式技術(shù),可以說嵌入式產(chǎn)品已經(jīng)遍及人們生活的各個方面[1],。嵌入式系統(tǒng)產(chǎn)品各種各樣,,不僅在各行各業(yè)得到了廣泛的應用,并且對人們的生活和社會的發(fā)展產(chǎn)生了重大的影響,。隨著消費者對嵌入式產(chǎn)品使用需求的擴大,,需要開發(fā)者開發(fā)出更高性能的軟硬件系統(tǒng),同時也將導致嵌入式系統(tǒng)的開發(fā)學習難度越來越大,。嵌入式開發(fā)過程中經(jīng)常會碰到軟硬件協(xié)同開發(fā),、嵌入式產(chǎn)品硬件資源非常昂貴、涉及軟硬件知識以及開發(fā)時間長[5]等問題[2-4],。
為了解決以上問題,,本文研究和開發(fā)了一個在Windows環(huán)境下的嵌入式支付系統(tǒng)模擬器,,模擬嵌入式支付系統(tǒng)的部分功能,實現(xiàn)在模擬器上進行部分應用程序的開發(fā)和調(diào)試,,并且在應用程序盡可能少地修改甚至不修改的情況下,,能夠在嵌入式支付真機上正常地運行起來。
1 嵌入式支付系統(tǒng)模擬器的體系結(jié)構(gòu)
1.1 系統(tǒng)體系結(jié)構(gòu)
系統(tǒng)的體系結(jié)構(gòu)如圖1所示,,可以看出系統(tǒng)包括3個部分:真機輔助工具,、人機交互以及模擬器處理。
?。?)真機輔助工具模塊
真機輔助工具是指一些輔助工具的集合,,這些工具的目的是加快嵌入式支付應用程序的開發(fā)。目前系統(tǒng)擁有資源工具,,該工具是一個由MFC開發(fā)的WIN32應用程序,,它能夠產(chǎn)生嵌入式支付應用程序所需的菜單數(shù)據(jù)。
?。?)人機交互模塊
主控模塊控制模擬環(huán)境,。該模塊包含人機交互界面和人機交互處理。
人機交互界面:模擬實現(xiàn)嵌入式支付真機的界面,,并將模擬器處理模塊處理的結(jié)果展現(xiàn)給用戶觀看,。
人機交互處理:模擬實現(xiàn)嵌入式支付系統(tǒng)的按鍵輸入與LCD輸出功能。
?。?)模擬器處理模塊
模擬器處理模塊實現(xiàn)嵌入式支付系統(tǒng)的模擬,,是整個模擬器的核心部分。該模塊又可以分為3層,,分別是中間層,、系統(tǒng)層以及配置層。
1.2 系統(tǒng)運行流程
系統(tǒng)的運行流程為:(1)系統(tǒng)啟動主控線程,,通過配置信息對象讀取配置文件內(nèi)容,;(2)主控線程根據(jù)窗口配置內(nèi)容繪制人機交互界面,接著根據(jù)模擬器相關信息對模擬器環(huán)境進行設置并對將要運行的應用DLL加載進來,;(3)啟動模擬器線程,,將應用跑起來;(4)應用運行,,用戶通過人機交互界面輸入數(shù)據(jù)并將數(shù)據(jù)傳遞到模擬器線程,,模擬器接收用戶的輸入并處理;(5)用戶結(jié)束應用,,系統(tǒng)結(jié)束模擬器線程,;(6)系統(tǒng)結(jié)束主控線程。
2 嵌入式支付系統(tǒng)模擬器的實現(xiàn)
2.1 配置層的實現(xiàn)
配置層包括配置信息以及配置信息對象,。配置信息是一個數(shù)據(jù)文件,,它的數(shù)據(jù)框架由模擬器可配置信息組成,,具體內(nèi)容由用戶填充。配置信息對象是一個類,,它提供統(tǒng)一的接口給用戶操作配置信息,。
模擬器系統(tǒng)采用配置信息可以實現(xiàn)兩個功能:機型的可選性和應用的動態(tài)加載。因為嵌入式支付系統(tǒng)適用于多種機型,,對于不同的機型,,它們的差異只是人機交互界面不同,、內(nèi)存大小不同,、Flash大小不同以及底層驅(qū)動的不一致,所以模擬器系統(tǒng)采用配置文件來動態(tài)繪制模擬器人機交互界面,、動態(tài)申請模擬器內(nèi)存大小,、動態(tài)設置模擬器Flash大小以及動態(tài)加載模擬器驅(qū)動。因此模擬器系統(tǒng)采用配置信息可以實現(xiàn)機型的可選性,。對于同一機型的不同應用程序也同樣可以采用配置文件實現(xiàn)動態(tài)加載,。
2.2 基礎系統(tǒng)模擬——“內(nèi)存池”模擬內(nèi)存管理
內(nèi)存池技術(shù)提供一種內(nèi)存分配方式,它向系統(tǒng)申請一大塊地址連續(xù)的內(nèi)存,,然后根據(jù)自己的需求管理這塊內(nèi)存,,如果出現(xiàn)內(nèi)存塊已經(jīng)不夠的情況時,繼續(xù)申請新的內(nèi)存,。這種做法的優(yōu)點是能夠降低內(nèi)存碎片來提高性能,。
在Windows上模擬嵌入式支付系統(tǒng)的內(nèi)存管理,理念上與內(nèi)存池技術(shù)非常類似:向Windows系統(tǒng)申請真機內(nèi)存條同等大小的內(nèi)存,,使用該塊內(nèi)存模擬嵌入式支付系統(tǒng)的內(nèi)存管理機制,。其與內(nèi)存池技術(shù)有以下兩個不同的地方:(1)如果出現(xiàn)內(nèi)存塊不足,拋出異常,,而不是繼續(xù)申請,;(2)模擬的目的不是為了減低內(nèi)存碎片,而是盡可能模擬嵌入式支付系統(tǒng)內(nèi)存的分配方式,。
2.3 驅(qū)動集模擬
2.3.1點陣映射模擬LCD驅(qū)動
LCD(Liquid Crystal Display,,液晶顯示器)作為輸出設備,用戶將要顯示的信息傳送到顯示緩沖區(qū)中,,然后LCD通過“點燈”的方式將其顯示出來,。在PC上也有LCD,是否可以通過PC上的LCD來模擬嵌入式支付真機的LCD,?答案是可以的,,只需要在PC上模擬嵌入式支付系統(tǒng)的LCD驅(qū)動即可。在PC上模擬LCD驅(qū)動就是將需要顯示的點陣數(shù)據(jù)繪制到PC的LCD上,,目前WIN32將一個點陣數(shù)據(jù)顯示到LCD上可以有以下兩種方式:(1)采用DOS下漢字的顯示原理,,利用SetPixel函數(shù)將點陣數(shù)據(jù)一個點一個點地畫,,這種方式的好處是彩屏的繪制,但是繪制速度慢,;(2)直接利用緩沖區(qū)的數(shù)據(jù)創(chuàng)建BMP對象,,這種方式可以快速地刷屏,但是只能實現(xiàn)單色繪制[6],。本系統(tǒng)借鑒這兩種方法,,采用雙緩沖機制,利用SetPixel函數(shù)將點陣數(shù)據(jù)繪制到一個中間DC(Device Context,,設備描述表)中,,在一定的條件下將該塊DC繪制到屏幕上。這樣既可以實現(xiàn)彩屏的繪制,,繪制速度也可以控制,。
2.3.2文件模擬Flash驅(qū)動
Flash是一種存儲芯片,它是嵌入式支付真機重要組成部分,。它不僅可以保存用戶的應用信息,,也可以保持系統(tǒng)的配置信息[7]。
Flash其實是一大塊連續(xù)的地址區(qū)域,,該區(qū)域里面的數(shù)據(jù)是可讀寫,、可永久保存的。因為Flash的空間比較大,,如果直接用內(nèi)存去模擬Flash,,可能會導致一些配置比較低的PC內(nèi)存不夠。模擬器系統(tǒng)根據(jù)Flash可永久保存特性,,采用文件對Flash進行模擬,。把文件看成是一大塊連續(xù)的地址空間,打開文件后可以獲取該地址空間的首地址,,加上偏移地址就可以獲得相應的地址空間,。這樣Flash驅(qū)動的模擬就變得簡單了,通過WIN32對文件的打開,、地址偏移,、讀取、寫入,、關閉函數(shù)來實現(xiàn)Flash驅(qū)動的初始化,、讀取、寫入和擦除等操作,。
2.4支付業(yè)務支撐模塊的設計與實現(xiàn)
支付業(yè)務支撐模塊是與支付應用直接相關的模塊,,該模塊為支付應用提供銀行卡卡號信息和部分加密算法。支付具體的流程由于不同銀行的支付協(xié)議不一致導致各不相同,,因此具體的支付處理由應用層程序根據(jù)不同的需求實現(xiàn)不同應用,,而嵌入式支付系統(tǒng)只提供用戶刷卡的銀行卡信息以及提供常見的幾個加密算法,。
嵌入式支付系統(tǒng)由于嵌入式資源的限制,并不能包括所有的加密算法,。其加解密算法包括des和3des的加解密,。該部分內(nèi)容可以直接移植到模擬器中,不需要進行修改,。
2.5 中間層的移植
在嵌入式支付系統(tǒng)中封裝一個middleware(中間層),,該層的內(nèi)容是對底層信息的封裝,供給應用程序直接使用,。目前模擬器系統(tǒng)middleware有GDI子系統(tǒng),、GUI子系統(tǒng)和DB子系統(tǒng)。GDI(Graphics Device Interface,,圖形設備接口)對底層LCD驅(qū)動進行封裝,,提供接口給GUI模塊和應用程序調(diào)用。嵌入式支付系統(tǒng)中GDI模塊包括動態(tài)繪制區(qū),、繪圖、貼圖,、文字,、光標、滾動條和開機啟動提示,。在LCD驅(qū)動已經(jīng)完成模擬的前提下,,GDI調(diào)用LCD驅(qū)動接口完成繪制操作。在模擬器系統(tǒng)中,,大部分GDI操作可以直接從嵌入式支付系統(tǒng)中移植,,而以下兩部分內(nèi)容則需要模擬:(1)對char進行位操作實現(xiàn)相應bit位的讀寫、取反實現(xiàn)GDI中bit操作,;(2)模擬器系統(tǒng)中采用直接讀取文字的bin文件來模擬文字的點陣信息的查詢操作,。
2.6 WIN32函數(shù)隔離的設計與實現(xiàn)
嵌入式支付系統(tǒng)參考WIN32中的UI設計,設計了適合其終端應用的GUI子系統(tǒng),。這樣設計既方便不同產(chǎn)品,、項目界面風格的統(tǒng)一,,也方便應用對操作界面的開發(fā)。但它給嵌入式支付系統(tǒng)帶來便利的同時也給模擬器系統(tǒng)帶來一個問題:嵌入式支付系統(tǒng)GUI函數(shù)與WIN32中GUI函數(shù)存在大量重名,,而且兩者的函數(shù)是不可替代的。例如在WIN32的GUI模塊中擁有CreateWindow函數(shù),,在嵌入式支付系統(tǒng)中的GUI模塊中也有CreateWindow函數(shù),,并且兩者的參數(shù)與實現(xiàn)功能不一致。又因為整個嵌入式支付系統(tǒng)采用C語言與匯編語言共同開發(fā),,所以模擬器系統(tǒng)需要解決一個大問題:C環(huán)境下如何使得重名函數(shù)共存,,并且使其調(diào)用不發(fā)生混亂,,即在主控系統(tǒng)中調(diào)用的是WIN32中的GUI函數(shù),而在模擬器應用程序中調(diào)用模擬器GUI函數(shù),。如圖2所示,,本系統(tǒng)提出利用DLL隔離、宏隔離以及區(qū)域隔離3種方式共同處理該問題,。
3 實驗結(jié)果與分析
3.1 實驗環(huán)境
硬件環(huán)境:CPU為Pentium4及以上,;內(nèi)存為1 024 MB及以上;可用硬盤空間為1 024 MB及以上,。
軟件環(huán)境:操作系統(tǒng)為Microsoft Windows 7,;開發(fā)工具為VS2010;開發(fā)語言為C和C++混合編程,。
3.2 實驗結(jié)果分析
移植計算器應用(如圖3所示),、菜單應用、萬年歷應用程序到模擬器上進行測試,,移植過程沒有進行源代碼的修改,,只是將其轉(zhuǎn)換為DLL,運行結(jié)果與嵌入式支付真機上一致,。
從測試結(jié)果可得出以下結(jié)論:
?。?)模擬器的可靠性:實際運行在嵌入式支付真機上的4個應用程序源碼保持不變,只是將其轉(zhuǎn)換為DLL,,通過X86VC編譯器編譯后可以運行在模擬器上,,并且其結(jié)果與真機上的結(jié)果保持一致。通過以上4個應用程序的測試,,說明該模擬器是可靠的,。
(2)模擬器應用開發(fā)的優(yōu)越性:將應用程序移植到模擬器上之后,,只需將該DLL配置到應用啟動項中就可以直接運行,,期間遇到問題可以直接使用VS2010的調(diào)試工具進行調(diào)試。因此在模擬器上開發(fā)應用程序不需要真機,,不需要燒片時間,,可以通過VS2010提供的調(diào)試工具進行調(diào)試,大大加快了應用的開發(fā)測試速度,。
4 結(jié)論
本文研究和開發(fā)了一個在Windows環(huán)境下的嵌入式支付系統(tǒng)模擬器,,該模擬器基于功能模擬的基本思想,通過Windows現(xiàn)有API模擬基礎系統(tǒng),,提出了保持對外接口不變,、模擬函數(shù)功能的原則,實現(xiàn)底層驅(qū)動的模擬。通過配置文件,,解決了模擬器適用于不同機型的問題,。本文還提出同時利用DLL隔離、宏隔離以及區(qū)域隔離3種方式,,解決了C環(huán)境下重名函數(shù)共存,,并且調(diào)用不混亂的問題。
參考文獻
[1] 李婷.ARM全系統(tǒng)模擬器中I2C模塊的設計與實現(xiàn)[D].成都:電子科技大學,,2012.
[2] Zhang Xiuping,, Yang Guowu, Zheng Desheng. Component-based model for simulating the MMU coprocessor[C]. 2010 2nd International Conference on Information Engineering and Computer Science(ICIECS),,2010,,42(8):1-4.
[3] 鄧漫齡.ARM嵌入式Linuz系統(tǒng)的研究與實現(xiàn)[D].北京:北京郵電大學,2009.
[4] 柯化成.嵌入式系統(tǒng)全系統(tǒng)模擬器框架設計與實現(xiàn)[D].杭州:浙江大學,,2006.
[5] Wang Ping. Research on the embedded system[J]. Teaching Education Technology and Training,,2008(1):21-22.
[6] GRANHAM I. 面對對象方法原理與實踐(英文版第3版)[M].北京:機械工業(yè)出版社,2003.
[7] 王洋.NAND Flash在嵌入式系統(tǒng)中的仿真與應用[D].成都:電子科技大學,,2011.