摘 要:Windows CE作為一種嵌入式系統在實際應用中取得了良好的效果。為了縮短嵌入式軟件的開發周期,節約成本,滿足日益增大的嵌入式系統應用軟件需求,探討程序移植方法在嵌入式軟件開發中的可行性。介紹一種將現有的Windows程序移植到Windows CE平臺的方案,該方案在原有的Windows程序基礎上,通過調整字符長度,修改Windows CE平臺不兼容的MFC和API函數,實現了嵌入式軟件的移植。采用該方案成功地將一套Windows平臺下排隊機呼叫系統移植到Windows CE平臺上,實現了其原有的功能。實踐表明程序移植是進行嵌入式軟件開發的一種行之有效的方法。
關鍵詞:系統移植;Windows CE;Unicode;嵌入式系統
中圖分類號:TP311文獻標識碼:A
文章編號:1004-373X(2010)02-028-03
Transplanting Research of the Queue Call System on Windows CE Platform
FENG Ansong,CHEN Gu,WANG Ying
(Shenyang Institute of Chemical Technology,Shenyang,110142,China)
Abstract:Windows CE as an embedded system in practical applications has achieved good results.In order to shorten embedded software development cycle,save costs and meet the growing demand for embedded systems applications,the possibility of transplant procedures in the embedded software,and a program of transplanting a Windows program into Windows CE platform are presented.Based on the original Windows program,the embedded software transplant is achieved,by adjusting the length of characters and modifying the MFC and API functions.Through the method,a queue system is transplanted to the Windows CE platform,and its original functions are realized.This example shows that the transplant procedure is the development of embedded software for an effective method.
Keywords:system transplant;Windows CE;Unicode;embedded system
收稿日期:2009-09-21
0 引 言
隨著嵌入式技術的不斷發展和完善,各種嵌入式系統得到廣泛的應用,Windows CE以其對設備的完善支持和良好的用戶界面得到眾多廠商的青睞,在Windows CE下快速開發應用程序成為各個公司廣泛關注的問題。由于現有的Windows程序不能直接在Windows CE平臺上運行,將現有的Windows程序移植到Windows CE下成為嵌入式軟件開發的一種現實而有效的方法。
Windows CE提供了EVB,EVC和Visual Studio等多種嵌入式的開發工具,在此將介紹VC程序向EVC中移植的具體的實現過程。EVC是Microsoft專門提供的一種嵌入式開發工具,與傳統的Visual C++相比,EVC支持大多數的MFC和ATL類,包含標準的Win32 API子集,而且EVC為各種不同的硬件設備提供了不同的編譯器,能夠快速地進行嵌入式應用程序開發\\。
1 移植要點
Windows CE是一種Unicode環境。它支持ASCII函數以實現文本文件交換,但其原有的文本格式是Unicode\\。所以必須將ASCII應用程序轉換為Unicode程序。
Windows CE API是Win32 API的一個子集,而且其中部分函數的功能已精簡,當從PC平臺移植已有的Win32應用程序到Windows CE時,應當檢查相關的API函數是否被Windows CE平臺所支持\\,對于不被支持的API函數應當精簡相關的功能。
基于Windows CE 的MFC設計遵循了標準MFC的功能和特性,但是它們在所提供的類和類的功能上還是有很大的不同。對于用標準MFC編寫的應用程序,在移植的過程中要檢查使用的類、方法和屬性在Windows CE中是否兼容\\。
大多數標準的Windows控件和公用控件仍然被支持,但是有一定的限制。Windows CE下使用ActiveX控件與Windows下不同之處是要編譯兩個版本的OCX,一個安裝到Windows上,這樣就可以在EVC環境下使用該OCX進行編程,一個安裝到WinCE上,用于使用這個OCX的程序調用。
VC程序是面向Win32平臺開發的,而EVC是面對具體各種不同的硬件環境的,可以通過Platform Builder定制不同的硬件環境下的SDK。程序的開發和調試過程可以在Windows CE仿真環境下進行\\。但是由于受到硬件環境的制約,Windows CE必須精簡部分功能,簡化操作界面:例如由于Windows CE屏幕大小的限制\\,Windows CE的命令欄包含了Windows中的工具和菜單欄,但是命令欄沒有停靠功能,被指定在屏幕的頂部,并且具有一個新的API。
2 實例分析
在此將一套Windows環境下運行的排隊機系統移植到Windows CE環境下。
2.1 排隊機系統介紹
排隊機系統是一種綜合運用計算機技術、網絡技術、多媒體技術、通訊控制技術的高新技術產品,能有效地代替客戶進行排隊,適用于各類窗口服務行業,目前已經廣泛應用于銀行、醫院等行業。使用排隊機系統,一方面可消除客戶長時間“站隊”的辛苦、對“站錯隊”、“插隊”的抱怨,全面改善服務質量和企業形象,另一方面可以依據統計數據調整業務分配、挖掘潛力、合理安排窗口服務,減少客戶的等候時間,提高辦事效率。排隊機程序在運行時的流程圖如圖1所示。
圖1 排隊機呼叫系統業務流程
2.2 硬件環境
這里使用的嵌入式平臺是廣州友善之臂的QQ2440V3,它采用Samsung S3C2440為微處理器,集成了多種設備接口,外接LCD觸摸顯示屏,并采用專業穩定的CPU內核電源芯片和復位芯片來保證系統運行時的穩定性。相比較以往的Windows平臺,基于ARM的嵌入式平臺具有體積小、功耗低、處理能力強等諸多優點。
圖2是排隊機的硬件組成情況。
2.3 移植實例
移植時EVC提示的錯誤分類及相對應的解決方法如下:
Error C2664: ′void_cdecl CString::Format (const unsigned short *...)′: cannot convert parameter 1 from ′char [17]′ to ′const unsigned short *′
Error C2664: ′strcpy′:cannot convert parameter 1 from ′unsigned short [14]′ to ′char *′
圖2 排隊機硬件組成
類似錯誤是移植過程中出現最多的一類錯誤,Windows CE系統是一個基于Unicode編碼的系統,在移植過程中可以使用TEXT宏和_T宏進行字符串映射,將相對應的ASCII數據轉換成對應得Unicode形式\\。如果使用C Runtime Library中的字符串處理function,那么就要改為wcs打頭而不是以str打頭,例如“strcpy”→“wcscpy”,在Windows CE中有專門向對應的寬字符處理函數對字符串進行處理。
Error C2039: ′Format′: is not a member of ′CTime′
查閱EVC中MSDN關于CTime 類的說明:MFC for Windows CE does not support the following methods of the CTime class:GetGmtTm;Format;Format_Gmt。有些類在Windows下的功能在Windows CE下就不被支持,在調試的過程中就必須根據實際情況做出調整。例如上面的CTime類中的Format子類在Windows CE下就不被支持,為了程序的正常運行必須刪除這個子類\\。相對應的程序在此處的功能就被精簡。
Fatal error C1189:#error:Database classes not supported in this library variant
因為ODBC不支持Unicode,所以MFC中數據庫的類不是完全支持的,在Windows CE中使用數據庫時必須使用Microsoft專門提供的SQLCE來實現\\。在Windows CE下訪問SQLCE數據庫時,不僅要在Windows上的包含必須ADOCE的頭文件和相關數據庫操作類的支持,而且在Windows CE運行的硬件平臺上還要注冊相關的OCX和一些必須的動態鏈接庫,只有這樣才能正常地訪問數據庫\\,下面的代碼為作者編寫的注冊OCX程序:
BOOL CDBaseDaraSql::RegisterOCX (CString pszDLLName)
HINSTANCE hLib=LoadLibrary (pszDllName);
…
FARPROC lpDllEntryPoint;
LpDllEntryPoint=GetProcAddress (hLib,_T (\"DllRegisterServer\"));
…
而運行SQLCE時所需要的動態鏈接庫如下所示:
PathDes [0]= L\"\\\\Windows\\\\adoce31.dll\";
PathDes [1]= L\"\\\\Windows\\\\adoxce31.dll\";
PathDes [2]= L\"\\\\Windows\\\\msdaer.dll\";
PathDes [3]= L\"\\\\Windows\\\\msdaosp.dll\";
PathDes [4]= L\"\\\\Windows\\\\ssce20.dll\";
PathDes [5]= L\"\\\\Windows\\\\ssceca20.dll\";
PathDes [6]= L\"\\\\Windows\\\\ssceerror20en.dll\";
PathDes [7]= L\"\\\\Windows\\\\msdaeren.dll\";
PathDes [8]= L\"\\\\Windows\\\\msdaeres.dll\";
PathDes [9]= L\"\\\\Windows\\\\msdaerde.dll\";
PathDes [10]= L\"\\\\Windows\\\\adocedb31.dll\";
PathDes [11]= L\"\\\\Windows\\\\adoceoledb31.dll\";
只有在注冊相關的動態鏈接庫后才能在設備上建立SQLCE下的數據庫文件,圖3是在設備上注冊相關組件后使用ISQLW 2.0創建的數據庫文件。
圖3 數據庫的創建
將上面提到的地方進行修改后程序能夠正常在QQ2440V3的平臺上運行,基本保證了原有排隊機功能。
3 結 語
在掌握兩種操作系統的區別后能很快地實現Windows程序向Windows CE平臺的移植,能使軟件開發人員快速地掌握嵌入式軟件開發,給嵌入式軟件開發提供了一個快捷而有效的方法。
參考文獻
[1]傅曦,齊宇.嵌入式系統Windows CE開發技巧與實例[M].北京:化學工業出版社,2003.
[2]周立功.ARM WinCE實驗與實踐:基于S3C2410[M].北京:北京航空航天大學出版社,2007.
[3]周毓林.Windows CE.NET內核定制及應用開發[M].北京:電子工業出版社,2005.
[4]Nick Grattan Marshall Brain.Windows CE 3.0 Application Programming[S].Prentice Hall PTR,2000.
[5]Mike Thomson.Windows CE.NET Real_time[N].2003.
[6]田東風.Windows CE 應用程序設計[M].北京:機械工業出版社,2003.
[7]張湘,肖建.嵌入式系統和嵌入式操作系統[EB/OL].中國機電一體化網,2004.
[8]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.
[9]周振喜,戴國俊.Windows應用程序移植到Windows CE下的策略[J].計算機工程與設計,2004(9):1 560_1 562,1 571.
[10]汪兵,李存斌,陳鵬.EVC高級編程及其應用開發[M].北京:中國水利水電出版社,2005.