WinCE port/zh TW
This article applies to Windows CE only.
See also: Multiplatform Programming Guide
│
English (en) │
italiano (it) │
português (pt) │
русский (ru) │
中文(臺灣) (zh_TW) │
為WinCE進行的Free Pascal移植已經相當完整了,這個移植工作是由Yury Sidorov所進行的,而WinCE API的標頭檔則是由Oliver (Oro06)移植的。
狀態
- FPC 2.2.0 以後的版本已經都可以支援WinCE應用程式了。
- 支援ARM CPU。
- 現在已支援以下的作業系統:
- Pocket PC 2002 – WinCE 3.0版
- Pocket PC 2003 – WinCE 4.20版
- Pocket PC 2003第二版 – WinCE 4.21版
- Windows Mobile 5 – WinCE 5.0版
- Windows Mobile 6 – WinCE 5.2版
- RTL和FCL 的單元檔都能用在WinCE上面了。
下載交叉編譯器
要開始開發WinCE應用程式最簡單的方法,就是下載最新版的Win32平台的FPC跟Win32平台版本的arm-wince交叉編譯器。
您可以從這裡下載: http://www.freepascal.org/download.var
首先請安裝Win32平台的FPC,然後安裝arm-wince的交叉編譯器安裝程式。
從原始碼建置WinCE交叉編譯器 (直接下載預先編譯好的交叉編譯程式比較快,就可以跳過這四個步驟直接開始寫程式了)
在教學手冊裡面有部分路徑只是用來展示教學如何建置編譯器用的,請將那些路徑從您的IDE系統中移除。
步驟一 – 交叉編譯工具程式
這些工具程式是建置執行檔時需要的基礎,例如連結程式、編譯器、建立函式庫的程式等等。
您需要為arm-wince建置交叉編譯工具程式,或者您也可以從這裡取得適用Win32平台的預先編譯好的工具程式: ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip
將這個zip檔解壓到您機器上的目錄上,例如: C:\Programas\arm
步驟二 – 交叉編譯器
現在您已經可以使用FPC交叉編譯器(為ARM處理器建置的版本)來建置應用程式了。請先準備FPC 2.1.x版本的原始碼,以及FPC 2.0.4版以後的Win32平台FPC程式。
您可以從SVN取得最新版的FPC原始碼: http://www.freepascal.org/develop.html#svn
以下的動作中,我們假設您的Win32平台FPC 編譯器安裝的路徑如下: C:\Programas\fpc\bin\i386-win32
而您的FPC 2.1版的原始碼是放在這個目錄裡的: C:\Programas\fpc
步驟三 – 開始建置
要建置交叉編譯器,PATH這個環境變數需要設定正確,因為在Windows系統裡面,安裝程式會使用到這個環境變數。要確認這個環境變數是否設定正確,您可以建立一個批次檔:
PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\arm make cycle CPU_TARGET=arm OS_TARGET=wince
請把上面這個批次檔放在C:\Programas\fpc\compiler這個目錄中,然後開啟一個Windows命令提示字元視窗,切換到該目錄,執行該批次檔。
在整個編譯過程中,您應該不會看到任何錯誤才對。(譯者已經在2008/1/5測試過,的確沒有問題)
您還需要把交叉編譯器程式ppccrossarm.exe放在C:\Programas\fpc\compiler目錄中;另外還需要把一些.o跟 .ppu檔案放在C:\Programas\fpc\rtl\units\arm-wince目錄裡面。
編譯完成後,請將這幾個檔案放到安裝Free Pascal的目錄中: ppccrossarm.exe必須放在C:\Programas\fpc\bin\arm-wince目錄中,而wince相關的單元檔則是要放在C:\Programas\fpc\units\arm-wince目錄中。
步驟四 – 設定
您需要在C:\Programas\fpc\bin\arm-wince中建立fpc.cfg這個設定檔,才能正確的使用ppccrossarm.exe這個交叉編譯器程式。
請先在C:\Programas\fpc\bin\arm-wince目錄中建立一個名為fpc.cfg的新純文字檔案,然後把以下這幾行設定加入該檔案裡面:
-Twince -FuC:\Programas\fpc\units\arm-wince -XParm-wince- -FDC:\Programas\arm
最後再把C:\Programas\fpc\bin\arm-wince 跟C:\Programas\fpc\bin\i386-win32這兩個路徑加入您的PATH 環境變數裡面即可。
步驟四變形 – 進行設定,讓編譯器保留建置Win32跟WinCE兩種應用程式的能力
如果您要讓同一份FPC能夠編譯Win32跟WinCE的應用程式專案,請這樣設定: * 把交叉編譯器ppcrossarm.exe程式直接複製到fpc/bin/i386-win目錄裡面。
- 直接編輯安裝FPC時自動產生的fpc.cfg,並把以下這幾行加進設定檔:
-FuC:\path_to_fpc\units\arm-wince -XParm-wince- -FDC:\path_to_arm_binutils
現在,如果您要編譯WinCE的應用程式,請在編譯時指定要建置的平台與CPU種類就行了。
附註: 如果您是用Lazarus的話,就不用弄得這麼複雜了,請確定您的編譯器路徑是設定為"fpc.exe",而非"ppc386.exe"即可。
編譯一個測試用的專案
在您建置了交叉編譯器,或安裝了從網站上下載的交叉編譯器程式之後,您就可以開始撰寫測試用的專案了,以下是引導您建立簡單Hello world應用程式的教學。
步驟一 – 安裝與設定模擬器
您需要Windows CE模擬器,並設定它好讓ActiveSync能與模擬器連線,ActiveSync需要安裝PocketCMD,這是一個命令提示字元工具,好用來執行您的Hellow world程式。
請從微軟的網站下載Pocket PC,這些模擬器都是模擬ARM CPU的。
要把模擬器設定來跟ActiveSync連線,則請參考這裡,這部分的教學跟英文版網頁的不太一樣,因為譯者已經把自己在Vista上面使用Windows Mobile 6模擬器的設定心得寫成中文與大家分享了。
步驟二 – 安裝命令提示字元工具
請下載由SymbolicTools所提供的”PocketCMD”,請從這裡下載
如果需要Pocket PC命令提示字元工具相關資訊,請參考 WinCE port notes。
步驟三 – 進行編譯
提供給您編譯用的範例程式,我們假設這個檔案存為test.pas:
program test; {$apptype console} var Str: string; begin WriteLn('Software Developed with:'); WriteLn('The Free Pascal Compiler'); WriteLn(''); WriteLn('Please, enter your name:'); ReadLn(Str); WriteLn('Your name is: ' + Str); end.
要編譯test.pas這個程式的命令為:
ppcrossarm test.pas
編譯完成後,會產生一個名為test.exe的執行檔,請將之複製到您的Windows CE模擬裝置上面來執行。
這裡提供了一些用這個方式建置出來的應用程式的螢幕截圖。
為WinCE應用程式進行偵錯
GDB可以透過ActiveSync對您的WinCE應用程式進行遠端偵錯,您可以從這個網址下載Win32平台上對arm-wince模擬器進行偵錯的GDB 6.4: ftp://ftp.freepascal.org/pub/fpc/contrib/cross/gdb-6.4-win32-arm-wince.zip
幾個提示:
- 在執行GDB的時候,請加上--tui這個參數,這樣一來,GDB的偵錯圖形介面就會出現,這會讓您的偵錯更舒適一點。
- 在您的Pascal原始碼裡面,換行符號只能使用Unix的換行符號(LF),不然GDB會回報說原始碼有錯。
如何使用:
首先,把您的Pocket PC模擬裝置進行”連接底座”的程序,好跟ActiveSync進行連線。
然後啟動gdb:
gdb --tui <位於您電腦上的執行檔>
如果您要使用提示字元模式進行偵錯,則請在GDB的提示字元中直接輸入:
run或是r
GDB會把您的執行檔複製到模擬裝置上的\gdb目錄,並開始執行它。
以下是最常用的幾個GDB命令與縮寫:
- r 參數 - 執行程式,並把參數傳遞給要偵錯的程式。
- s - 單步執行-進入副程式.
- n - 單步執行.
- ni - 單步執行,直接跨越組合語言指令。
- c - 繼續執行程式 (直接執行,不會再繼續單步執行了)
- br <函式名稱> - 在function_name上設定一個中斷點。使用PASCALMAIN就可以在程式開始的地方設定中斷點。
- br <原始碼檔案名稱>:<行號> - 在指定檔案的第幾行上面直接設定中斷點。
- disas - 顯示當前位置的組合語言指令碼(進行反組譯)。
- x/fmt 記憶體位址 - 用指定的格式把該記憶體位址的資料顯示出來。您可以輸入"help x"來讀取更多跟顯示格式相關的資訊。
- bt - 反向偵測,把呼叫堆疊(call stack)裡面的資料顯示出來。
- where - 顯示當前的這一行是屬於哪個函式,以及呼叫目前這個函式的呼叫者是誰。
- q - 離開gdb.
您也可以在以下網址參閱它的說明文件: http://www.gnu.org/software/gdb/documentation
建置FPC函式庫
如果您要把FPC的函式庫建置出Arm-WinCE版本的話,請切換到函式庫的目錄,並執行以下指令:
PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\fpc\compiler;C:\Programas\arm make OS_TARGET=wince CPU_TARGET=arm PP=ppcrossarm.exe
舉例來說,如果您要建置FCL,請切換到fpc\fcl目錄,然後執行上面的指令,建置完成後,Arm-WinCE版本的FPC函式庫就會建置在fpc\fcl\units\arm-wince目錄裡面了。
說明文件
一些跟WinCE相關的註記
- 如果您發生無法辨識的錯誤: "Uknown error! Error code : 0xc1",而在發生這錯誤時,是有使用dll的話,這錯誤可能是因為使用了該dll所開放的某些函式,請確認該dll檔的export區段,以及您使用到的函式名稱是否正確。
WinCE 移植註記
- chdir這個函式永遠都會錯誤,因為WinCE並沒有提供當前所在目錄的功能。
- 要描述到所有檔案的時候,一定必須是絕對路徑(從\開始)
- WinCE是個Unicode的OS,所有在API裡面使用到的字串參數,其型別一定得是PWideChar)
- WinCE並不支援環境變數。
- WinCE預設並不支援命令提示字元模式的應用程式,但您可以自己安裝一些套件,讓它支援命令提示字元。所以請記得,FPC為WinCE建立的專案預設都是圖形介面的應用程式,如果您要建立命令提示字元的應用程式,您得自己在執行編譯器的時候加上-WC這個參數,或者在主程式原始碼檔案裡面加入{$APPTYPE CONSOLE}這個關鍵字。
要讓WinCE能支援命令提示字元模式,您必須要安裝下列程式的其中之一:
PPC Command Shell的功能比PocketCMD少,而且還有些問題。執行上述兩個程式的時候,不管原來是否已經有命令模式字元視窗在執行中,都會開啟一個新的命令模式字元視窗。
- 要讓Windows Mobile 5跟6使用命令提示字元輸出,請把登錄值作以下的設定:"HKEY_LOCAL_MACHINE\Drivers\Console\OutputTo" to 0.
參考文件
相關連截
- 有用的WinCE相關資訊 http://www.rainer-keuchel.de/documents.html
- 微軟提供的模擬器獨立發形版本,它會模擬使用ARM CPU的PDA裝置,請從此處下載。
- Mamaich提供,能建立WinCE版應用程式的GCC GCC http://mamaich.uni.cc
- Buildfaq一般的常見問答,關於如何建置跟設定FPC。
以下是跟ARM CPU架構相關的一些文件:
- ARM核心開發論壇 討論中的文章不太多。
- GCC ARM增強專案
- ARM組譯程式 與ARM CPU的組合語言相關的資訊跟程式碼。
- GNU ARM工具組,對應Cygwin, Linux跟MacOS
- Microsoft Windows CE .NET 4.2 ARM 開發手冊
- ARM指令集與程式提供了關於ARM架構的詳細資料。
- ARM指令集是一個說明ARM指令的PPT檔
貢獻與聯繫
如果您有任何跟WinCE移植相關的問題,請與Yury Sidorov連繫(只能寫英文喔, 他是俄羅斯人)
- 初版正體中文翻譯,以及Device Emulator 2.0等相關資訊,由元智大學資訊傳播學系兼任講師張子仁 (Dennies Chang)製作。 - 2008/1/7 User:Dennies