N年前,曾經發布過一篇Wince 6環境的搭配,由於工作上基本沒有與CE產生任何交集,所以這一系列被一直打入冷宮。
雖然現在微軟已經出win phone 8了,感覺wince 已經被其拋棄了,但是實際上很多人及公司產品還在使用,所以學習一下還是有一定的必要性。
現在回想起來,學習一個系統,應該先從應用程序入手(不管是win還是linux),并不是直接研究內核。因為一下子就講內核,很多人都會不知所以然。所以我個人認為學習wince應該從應用入手,也將是對我這幾天對Wince的研究作為筆錄。
又來廢話一下,XP將在幾天后停止服務,雖然這差不影響,但可能很多人都已經轉入win7,甚至win8的行列。本人在再次搭建環境時發現,win7 64bit安裝vs2005會導致不能正常開發桌面程序,因此本人只能在虛擬器上,安裝XP來搭建wince 的開發環境(個人記得以前win7 32bit 的系統是可以正常安裝vs2005,并正常使用的。也許vs2008能在64bit上正常使用,這個我沒有試過)。 我想如此是想用win8開發wince已經成為不可能了(win8能否安裝vs2005都是個問題),因為win8 基本是用于開發win phone 7以上的應用程序的。
好了,進入正題吧。這里先說一些概念。
BSP:
在內核定制時,需要一個叫BSP(Board support package)的東西,BSP中文名叫板級支持包,它是一個介於硬件與系統驅動中的一層,有了這個BSP,內核才能很好地對硬件操作。但應用開發時,不需要這東西,因為內核定制時,已經把這個包括進去了,這里只講應用開發,不做內核定制。
NK:
Nk說白了,就是內核。一般內核定制完成后會生成nk.bin文件。
SDK:
SDK這名字應該很熟悉,這個就是軟件開發套裝,是一個在內核定制時,創建的一個用于開發特定硬件上的Wince程序的一個開發套件(例如:在arm或在x86 CPU上SDK是不一樣的,即使是同樣是ARM,不同廠商,不同系列都可能會不同),這個是開發Wince應用程序的重要部份,所以,如果想開發Wince上的應用,一定要有SDK,否則是開發不了的。開發應用程序時,Platform builder 其實可以不用安裝的,不過如果要研究內核定制,還是把它裝上吧。
好了,這里,其實也沒有什麽概念可說了,因為我就知道那麼一點。下面將講vs2005上開發窗口應用程序及其調試。
vs2005上開發應用程序:
如果有用過VC開發窗口程序的,我想很多人都會想起MFC。在wince上一樣可以用MFC開發窗口程序,而且兩者差異也不多,一般情況是是win32 API在兩個平臺上都能正常使用,但有一些特殊的函數,可能只能在桌面上用,而不能在CE上使用,這樣只能找替代的方法解決。但在CE上可以使用的,在桌面程序上一般可以直接使用。
由於我開發的程序是公司的東西,所以我就不用來做例子,這里主要說一些我發現于桌面程序不同的一些函數及一些CE上的開發小技巧。
由於我安裝了一個叫GT_x86的SDK(我的硬件支持的SDK),在新建MFC程序時,應該選擇GT_x86。這個選擇與你的安裝的SDK有關。
I、差異(由於接觸不多,所以只有一些,如果以後再碰到,再添加)
1)線程的創建及關閉
_beginthreadex
_endthreadex
在CE上應該使用
AfxBeginThread
AfxEndThread
或使用
CreateThread
ExitThread
2)串口配置函數
BuildCommDCB
在CE上沒有了這函數,只能對配置結構體一個一個慢慢賦值,再SetCommState,把配置寫入。
II、技巧(由於接觸不多,所以只有一些,如果以後再碰到,再添加)
1)控件是在層次的,如果你要在Group-box Control上放入控件,如Radio Control,Button Control。
在桌面程序上,Group-box Control 一般會自動放在最底層,Radio Control,Button Control會放在最頂層。
但在CE上,這個層次會有所不同,越早放的控件,將放在頂層,假如你先放好Group-box Control 再放 Radio Control,這樣,Group控件會把所有Radio給擋住。
解決方法是:1、越頂層的控件越早放。2、Ctrl + D,把Radio序號設成比Group 小。
2)控件取代
在桌面程序上,我使用了Custom Control 畫圖,這個控件,轉到CE 上問題就出來了,載入是需要一個叫aygshell.dll(一些基本控件基本上都是可用的,有一部份非基本的可能需要一些庫的支持),的動態庫,不知道這是內核定制時沒有加入,還是其他原因,但是如果在不改變內核的前提下(公司分工明顯,不可能為了你一個小程序修改內核),可以用Static Text替代。由於是用於畫圖簡單的圖,在理論上是可以在任何一個控件上進行畫圖,但是有一些控件會被經常重繪,所以Static將是一個很好的替代,繼承一個Static,寫成自己的一個類,將可以代替Custom Control 的功能。
編碼其實也沒有好說的,不同人有不同的編碼風格和技術,這里就講到這里,正面將是整個文章的重點。
Wince程序調試:
如果有研究過Wince的人可能會知道一點點調試方法,一般Wince程序有兩種調試方式,一種是串口調試,另一種是以太網調試。
I、串口調試:
連接設備,安裝好串口驅動程序,再打開ActiveSync,它會自動連接設計,在VS2005直接調試,程序就會在wince上運行(這個方法比較容易)。
II、以太網調試:
由於大部分人都用串口調試,這使得用網絡調試的資料少之又少,可能有人會問,有串口不就行了嗎,幹嘛要用網絡?其實有所不知了,一些設備串口一般只用于內部(開發板除外),對外的就只能一個網口,難道你要把設備全拆開后,再想辦法供電,以此達到調試?這不麻煩嗎?好了,網口原來除了上網還有其他的用處了!
注:使用網口調試前,先保證有網絡的驅動,否則一切白說!
網絡調試有點,但瞭解了,其實并不複雜,下面將兩兩邊描述。在描述前,要先找到一些文件,這些文件用于Wince端連接用的,路徑如下:
Program FilesCommon FilesMicrosoft SharedCoreCon1.0Targetwce400<CPU>
我的CPU是x86的,所以路徑為C:Program FilesCommon FilesMicrosoft SharedCoreCon1.0Targetwce400x86,把x86整個文件夾(其5個文件),Copy到U盤,并Copy到wince中,方便接下來的操作。
連接設備方式有兩種,一種直連設備,一種通過路由連接
直連設備:
1)設置Wince 的靜態IP,如:
IP : 192.168.0.2
mask: 255.255.255.0
gateway:192.168.0.1
2)設置PC的靜態IP,如:
IP : 192.168.0.5
mask: 255.255.255.0
gateway:192.168.0.1
3)把兩IP設成同一子網才能相互通信,然後 ping 192.168.0.2,如果Ping不同請重新配置及拔插網線再試
路由連接:
1)獲取Wince 的IP
2)獲取PC的IP
3) ping 192.168.0.2,如果Ping不同請重新配置及拔插網線再試
好了,在這樣,已經確保網絡已經通了,正面將開始真正連接設備。
Wince端:
1、打開wince中的Cmd,找到x86文件夾,打開ConmanClient2.exe,打開后,輸入提示沒有顯示(因為程序沒有退出)
2、再次打開wince中的Cmd,找到x86文件夾,打開CMAccept.exe,打開后,輸入提示沒有顯示(因為程序沒有退出)
PC端:
1、點入Device Options
2、在show devices for platform中選中SDK后,先中Device,并點入Properties
3、點Configure 彈出圖下的框,選擇use specific ip address,輸入Wince的IP地址。
4、選擇點Connect,當出現圖右的框,表示連接成功。
5、選擇Debug,程序將在wince 上運行,現在可以進行調試了!當進入調試后,你會發現CE上的CMAccept.exe已經退出了,但是卻不影響調試。
我不知道SDK是否會創建一個Device,如步驟2中看到的Device,如果沒有還得自己創建一個。
打開這選項的前提是,沒有打開任何工程。
選擇Add Device,選擇對應的SDK,來創建Device。并如何配置(192.168.0.2,是我Wince設備的IP)
這里要選上Enable access to desktop files,最后Apply。
上面的設置,感覺上是給下載NK用的,但是由於自己瞭解不多,還是先貼上,也許能有一點點的幫助。
總結:
由於自己也是邊學邊做,所以有很多地方不足,難免很多錯誤之外,如果發現不足及錯誤,請諒解!
以上操作參考來自,eBox3300MSJK_CE60_JumpStart_Rev2.5x.pdf。