1. 程式人生 > >基於VS應用開發的WinCE和PC機的區別

基於VS應用開發的WinCE和PC機的區別

WindowsCE是微軟公司嵌入式、移動計算平臺的基礎,它是一個開放的、可升級的32位嵌入式作業系統,是基於掌上型電腦類的電子裝置作業系統,它是精簡的Windows 95,Windows CE的圖形使用者介面相當出色。對於大部分製造業企業,測量儀器的自動資料採集一直是個令人煩惱的事情,即使儀器已經具有RS232/485等介面,但仍然在使用一邊測量,一邊手工記錄到紙張,最後再輸入到PC中處理的方式,不但工作繁重,同時也無法保證資料的準確性,常常管理人員得到的資料已經是滯後了一兩天的資料;而對於現場的不良產品資訊及相關的產量資料,如何實現高效率、簡潔、實時的資料採集更是一大難題。 WinCE, 它是將條碼掃描裝置與資料終端一體化,帶有電池可離線操作的終端電腦裝置。具備實時採集、自動儲存、即時顯示、即時反饋、自動處理、自動傳輸等功能。為現場資料的真實性、有效性、實時性、可用性提供了保證。其具有一體性、機動性、體積小、重量輕、高效能,並適於手持等特點。它主要應用於工業資料採集中。好了,廢話不多說,直接說說WinCE的應用程式開發與PC機應用程式開發的區別。 1
、開發思想為了好理解,下面將開發產品的電腦叫主機,被開發的裝置叫從機。 PC程式開發的主機(開發的裝置)和從機(被開發的裝置)是一體的,即是本身;WinCE開發的主機是PC,從機是WinCE,兩者一般通過USB同步來通訊。要建立個概念。
這個是最重要的。有客戶直接問,是不是要在WinCE上裝一個VS2005或者labview軟體,我並不覺得可笑。因為一些一直從事PC上應用開發的工程師,不像我這些搞微控制器過來的,他們沒有主機和從機的概念。建立這個概念,對從PC程式設計到WinCE開發,有很大的幫助。PC程式設計不需要知道SDK、主從機的概念,編譯好程式就馬上可以在本機出來。正因為如此,他們就分不清主從機,哪個是在PC上執行,那個應該是在WinCE上跑。

要清楚那些工具是用來開發裝置程式的,那些工具是在裝置上執行的。
例如,開發工具VS2005、SDK,這個對PC程式設計還是WinCE開發都是執行在主機上,用於裝置開發的;編譯出來的程式,以及執行這程式相關的DLL(例如開發SQL相關的程式,需要在裝置上安裝SQL、.net framework ,也就是一些DLL)都是屬於裝置的。對於.net framework 或者SQL,PC 和 WinCE上都有自己的版本,如PC上是SQL2000,WinCE是SQLCE3.5,這個是為應用程式的執行服務的,歸屬於從機的概念。開發WinCE的時候,主機會下載SQLCE、.Net到WinCE上使得開發的程式執行起開(當然可以在裝置上直接安裝這些或已經有了,就不用主機下載進去安裝了)。開發PC程式的時候,由於主從是一體,會看不到這個過程,導致大部分人忽略了,轉而對WinCE開發產生迷惑。

現在的VS2005自己本身也集成了這些服務運行於裝置的程式(WinCE5.0、6.0的SQLCE .NetFramework,XP的.NetFramework),當然某些還是要安裝的,例如XP的SQL2000,但其目的主要是服務使用者開發的程式,屬於裝置的。
  SDK
SDK就是軟體開發工具包,當然是屬於主機上使用的東西。PC開發無論是VS2005,或者VC6.0,安裝的時候已經包含了SDK包,因為PC的架構(X86)系統是單一的。而WinCE裝置的種類很多,無法做到單一,需要廠家提供。國內生產WinCE工業平板電腦的廠商(比如深圳揚創科技有限公司www.yctek.com)會提供相關的SD等開發資料。主機是呼叫這些SDK生成平臺相關的程式。然後下載到裝置執行。開發示意如下圖所示。
 

2、開發工具  EVC4.0 SP4  & VC6.0。早期的WinCE C++開發工具使用EVC4.0,十分類似於PC上早期常用的VC6.0。如果有VC6.0程式設計基礎的,使用EVC新建一個工程,一步步實現功能。參考自帶的幫助,這個也不會太難。當然,如果將VC6.0的程式直接移植到WinCE上,這個相對困難些。最好還是自己重新建一個程式。WinCE的API程式設計,或者MFC,功能沒有Windows XP的大,有些函式、類也被裁減了。但這些在MSDN上都有說明。另外注意的是EVC 中字串預設的是UNICODE編碼(即一個字元wchar_t是2個位元組 typedefunsigned short wchar_t),而VC的是ASCII編碼(一個字元char 1個位元組)。 
  EVC現在微軟不推薦使用了,而且只能夠支援到WinCE5.0。我還是建議客戶使用VS2005。
 
VS2005。VS2005不再像EVC和VC一樣,分開版本分別針對平臺;而是把各種平臺整合到一個IDE上,統一管理。對智慧裝置,除了他本省自帶的SDK外,使用者還可以安裝其他的SDK,在建立程式的時候,選擇相應的SDK即可。轉移到桌面Windows的開發,大家最熟悉不過的就是vc6.0。這款軟體,堪稱是經典,無論是執行速度,還是編譯速度,在當年都是無望而不可及的高峰。即使是現在,很多人對此還津津樂道,特別是很多高校,教導C++採用的還是VC6.0,可見其影響力。只不過,技術是不停地發展的,微軟註定不會讓VC6.0舒服,後續才逐漸推出VS系列。你所能想到的開發方式,vs2005都可以幫你解決。更為有意思的是,在此之前,同一套程式碼,分別適用於WinCE和WinXP,那麼你就必須為這兩個系統建立不同的工程:一個是給EVC用的,另一個是給VC。但如果你使用VS2005之後,那麼一切都不同了。雖然一開始會強制讓你選擇開發的平臺,但實際上生成工程之後,你可以手動新增不同的SDK。換句話來說,你只要簡單地在vs2005上選擇不同的SDK,就可以編譯不同平臺的程式。相對以前,這無疑是一個巨大的進步。談完開發工具,我們再來看看除錯的方式。在WinXP裡,除錯的環境和開發的環境是共用的。這個比較好理解,不就是本機編譯的程式會直接在本機上執行嘛。只不過有一些危險的操作,估計沒幾個人會除錯,比如說軟體上有全盤格式化功能,我想沒幾個人會在本機上除錯吧?WinCE就安全點,反正直接在WinXP上點選WinCE程式會給你彈出一個錯誤的執行框。所以,要除錯WinCE程式,你只有兩種途徑,一個是使用模擬器,另一個就是通過ActiveSync連線到開發板。而這兩種方式,最好的自然是後者,畢竟模擬器,顧名思義,就是"模擬",很多實際上會發生的問題很可能會被遮蔽。只不過,如果是開發消費類電子,在還沒有板子回來前,模擬器確實是唯一的選擇。  具體到API函式程式碼方面,也確實有意思。WinXP有的函式,WinCE不一定具備;同樣,WinCE隨處可見的,也不一定在WinXP上有其身影;即使是兩者都有的,其引數也不一定相同。 SystemTimeToTzSpecificLocalTime,然後在WinXP下也搜搜SetEventData,最後比較一下ReadFile最後一個形參試試?如果你不需要程式碼橫跨兩個平臺,那麼這些都不是問題;如果你需要互相移植,那麼前面的兩個問題也不是什麼大問題,大不了自己重新寫一個同名函式即可。最鬱悶的是最後一個,兩個系統都有相應的函式,只是形參不同。像ReadFile這樣算是好的,最後一個形參WinCE明令指出必須設定為NULL,你將該程式碼原封不動移植到WinXP下,也能正常工作。但有的函式就沒有那麼好的運氣了,比如說CreateProcess的倒數第二個形參psiStartInfo,在WinCE下必須設定NULL,但如果你還是不加更改照搬到WinXP,那麼迎接你的將是程式的崩潰--因為在WinXP下,該形參不能為NULL!  不僅API函式需要留意,其實訊息處理機制也必須注意。因為WinCE是一個精簡的系統,實時性要求高,所以在WinCE下面訊息處理機制有點點和WinXP不同。很可能在WinXP下跑得很正常的程式碼,在WinCE下會啞火;同樣的道理,能在WinCE完美表現的程式碼,也許在WinXP下是一團糟。如果遇到這種情況,不妨從訊息處理函式入手,說不定能有意外的驚喜。