WinCE port/zh TW

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
WinCE Logo.png

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版
  • RTLFCL 的單元檔都能用在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-winceC:\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能支援命令提示字元模式,您必須要安裝下列程式的其中之一:

    • 由SymbolicTools 提供的PocketCMD,我們也推薦您安裝這個程式,可以從這裡取得。
    • 微軟所提供的PPC Command Shell,它是Microsoft Windows Mobile Developer Power Toys的一部分,您可以從 這裡取得

PPC Command Shell的功能比PocketCMD少,而且還有些問題。執行上述兩個程式的時候,不管原來是否已經有命令模式字元視窗在執行中,都會開啟一個新的命令模式字元視窗。

    • 要讓Windows Mobile 5跟6使用命令提示字元輸出,請把登錄值作以下的設定:"HKEY_LOCAL_MACHINE\Drivers\Console\OutputTo" to 0.

參考文件

相關連截

以下是跟ARM CPU架構相關的一些文件:

貢獻與聯繫

如果您有任何跟WinCE移植相關的問題,請與Yury Sidorov連繫(只能寫英文喔, 他是俄羅斯人)