WinCE port/zh TW: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: WinCE port/zh TW
| Old | New | Line | |
|---|---|---|---|
| 1 | + | 為WinCE進行的Free Pascal移植已經相當完整了,這個移植工作是由Yury Sidorov所進行的,而WinCE API的標頭檔則是由Oliver (Oro06)移植的。 | |
| 2 | + | ||
| 3 | + | ## 狀態 | |
| 4 | + | ||
| 5 | + | - FPC 2.2.0 以後的版本已經都可以支援WinCE應用程式了。 | |
| 6 | + | - 支援[[ARM]] CPU。 | |
| 7 | + | - 現在已支援以下的作業系統: | |
| 8 | + | - Pocket PC 2002 – WinCE 3.0版 | |
| 9 | + | - Pocket PC 2003 – WinCE 4.20版 | |
| 10 | + | - Pocket PC 2003第二版 – WinCE 4.21版 | |
| 11 | + | - Windows Mobile 5 – WinCE 5.0版 | |
| 12 | + | - Windows Mobile 6 – WinCE 5.2版 | |
| 13 | + | - [RTL](http://community.freepascal.org:10000/docs-html/rtl)和[FCL](http://community.freepascal.org:10000/docs-html/fcl) 的單元檔都能用在WinCE上面了。 | |
| 14 | + | ||
| 15 | + | ## 下載交叉編譯器 | |
| 16 | + | ||
| 17 | + | 要開始開發WinCE應用程式最簡單的方法,就是下載最新版的Win32平台的FPC跟Win32平台版本的arm-wince交叉編譯器。 | |
| 18 | + | ||
| 19 | + | 您可以從這裡下載: <http://www.freepascal.org/download.var> | |
| 20 | + | ||
| 21 | + | 首先請安裝Win32平台的FPC,然後安裝arm-wince的交叉編譯器安裝程式。 | |
| 22 | + | ||
| 23 | + | ## 從原始碼建置WinCE交叉編譯器 (直接下載預先編譯好的交叉編譯程式比較快,就可以跳過這四個步驟直接開始寫程式了) | |
| 24 | + | ||
| 25 | + | 在教學手冊裡面有部分路徑只是用來展示教學如何建置編譯器用的,請將那些路徑從您的IDE系統中移除。 | |
| 26 | + | ||
| 27 | + | **步驟一** – 交叉編譯工具程式 | |
| 28 | + | ||
| 29 | + | 這些工具程式是建置執行檔時需要的基礎,例如連結程式、編譯器、建立函式庫的程式等等。 | |
| 30 | + | ||
| 31 | + | 您需要為arm-wince建置交叉編譯工具程式,或者您也可以從這裡取得適用Win32平台的預先編譯好的工具程式: <ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip> | |
| 32 | + | ||
| 33 | + | 將這個zip檔解壓到您機器上的目錄上,例如: `C:\Programas\arm` | |
| 34 | + | ||
| 35 | + | **步驟二** – 交叉編譯器 | |
| 36 | + | ||
| 37 | + | 現在您已經可以使用FPC交叉編譯器(為ARM處理器建置的版本)來建置應用程式了。請先準備FPC 2.1.x版本的原始碼,以及FPC 2.0.4版以後的Win32平台FPC程式。 | |
| 38 | + | ||
| 39 | + | 您可以從SVN取得最新版的FPC原始碼: <http://www.freepascal.org/develop.html#svn> | |
| 40 | + | ||
| 41 | + | 以下的動作中,我們假設您的Win32平台FPC 編譯器安裝的路徑如下: `C:\Programas\fpc\bin\i386-win32` | |
| 42 | + | ||
| 43 | + | 而您的FPC 2.1版的原始碼是放在這個目錄裡的: `C:\Programas\fpc` | |
| 44 | + | ||
| 45 | + | **步驟三** – 開始建置 | |
| 46 | + | ||
| 47 | + | 要建置交叉編譯器,`PATH`這個環境變數需要設定正確,因為在Windows系統裡面,安裝程式會使用到這個環境變數。要確認這個環境變數是否設定正確,您可以建立一個批次檔: | |
| 48 | + | ||
| 49 | + | PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\arm | |
| 50 | + | make cycle CPU_TARGET=arm OS_TARGET=wince | |
| 51 | + | ||
| 52 | + | 請把上面這個批次檔放在`C:\Programas\fpc\compiler`這個目錄中,然後開啟一個Windows命令提示字元視窗,切換到該目錄,執行該批次檔。 | |
| 53 | + | ||
| 54 | + | 在整個編譯過程中,您應該不會看到任何錯誤才對。(譯者已經在2008/1/5測試過,的確沒有問題) | |
| 55 | + | ||
| 56 | + | 您還需要把交叉編譯器程式`ppccrossarm.exe`放在`C:\Programas\fpc\compiler`目錄中;另外還需要把一些`.o`跟 `.ppu`檔案放在`C:\Programas\fpc\rtl\units\arm-wince`目錄裡面。 | |
| 57 | + | ||
| 58 | + | 編譯完成後,請將這幾個檔案放到安裝Free Pascal的目錄中: `ppccrossarm.exe`必須放在`C:\Programas\fpc\bin\arm-wince`目錄中,而wince相關的單元檔則是要放在`C:\Programas\fpc\units\arm-wince`目錄中。 | |
| 59 | + | ||
| 60 | + | **步驟四** – 設定 | |
| 61 | + | ||
| 62 | + | 您需要在`C:\Programas\fpc\bin\arm-wince`中建立`fpc.cfg`這個設定檔,才能正確的使用`ppccrossarm.exe`這個交叉編譯器程式。 | |
| 63 | + | ||
| 64 | + | 請先在`C:\Programas\fpc\bin\arm-wince`目錄中建立一個名為`fpc.cfg`的新純文字檔案,然後把以下這幾行設定加入該檔案裡面: | |
| 65 | + | ||
| 66 | + | -Twince | |
| 67 | + | -FuC:\Programas\fpc\units\arm-wince | |
| 68 | + | -XParm-wince- | |
| 69 | + | -FDC:\Programas\arm | |
| 70 | + | ||
| 71 | + | 最後再把`C:\Programas\fpc\bin\arm-wince` 跟`C:\Programas\fpc\bin\i386-win32`這兩個路徑加入您的`PATH` 環境變數裡面即可。 | |
| 72 | + | ||
| 73 | + | **步驟四變形** – 進行設定,讓編譯器保留建置Win32跟WinCE兩種應用程式的能力 | |
| 74 | + | ||
| 75 | + | 如果您要讓同一份FPC能夠編譯Win32跟WinCE的應用程式專案,請這樣設定: * 把交叉編譯器ppcrossarm.exe程式直接複製到fpc/bin/i386-win目錄裡面。 | |
| 76 | + | ||
| 77 | + | - 直接編輯安裝FPC時自動產生的fpc.cfg,並把以下這幾行加進設定檔: | |
| 78 | + | ||
| 79 | + | -FuC:\path_to_fpc\units\arm-wince | |
| 80 | + | -XParm-wince- | |
| 81 | + | -FDC:\path_to_arm_binutils | |
| 82 | + | ||
| 83 | + | 現在,如果您要編譯WinCE的應用程式,請在編譯時指定要建置的平台與CPU種類就行了。 | |
| 84 | + | ||
| 85 | + | 附註: 如果您是用Lazarus的話,就不用弄得這麼複雜了,請確定您的編譯器路徑是設定為"fpc.exe",而非"ppc386.exe"即可。 | |
| 86 | + | ||
| 87 | + | ## 編譯一個測試用的專案 | |
| 88 | + | ||
| 89 | + | 在您建置了交叉編譯器,或安裝了從網站上下載的交叉編譯器程式之後,您就可以開始撰寫測試用的專案了,以下是引導您建立簡單Hello world應用程式的教學。 | |
| 90 | + | ||
| 91 | + | **步驟一** – 安裝與設定模擬器 | |
| 92 | + | ||
| 93 | + | 您需要Windows CE模擬器,並設定它好讓ActiveSync能與模擬器連線,ActiveSync需要安裝PocketCMD,這是一個命令提示字元工具,好用來執行您的Hellow world程式。 | |
| 94 | + | ||
| 95 | + | 請從微軟的[網站](http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=dd567053-f231-4a64-a648-fea5e7061303)下載Pocket PC,這些模擬器都是模擬ARM CPU的。 | |
| 96 | + | ||
| 97 | + | 要把模擬器設定來跟ActiveSync連線,則請參考[這裡](http://wiki.lazarus.freepascal.org/Windows_CE_Interface/zh_TW#.E5.AE.89.E8.A3.9D.E8.88.87.E4.BD.BF.E7.94.A8Pocket_PC_.E6.A8.A1.E6.93.AC.E5.99.A8),這部分的教學跟英文版網頁的不太一樣,因為譯者已經把自己在Vista上面使用Windows Mobile 6模擬器的設定心得寫成中文與大家分享了。 | |
| 98 | + | ||
| 99 | + | **步驟二** – 安裝命令提示字元工具 | |
| 100 | + | ||
| 101 | + | 請下載由SymbolicTools所提供的”PocketCMD”,請從[這裡](http://www.symbolictools.de/public/pocketconsole/applications/PocketCMD)下載 | |
| 102 | + | ||
| 103 | + | 如果需要Pocket PC命令提示字元工具相關資訊,請參考WinCE port notes。 | |
| 104 | + | ||
| 105 | + | **步驟三** – 進行編譯 | |
| 106 | + | ||
| 107 | + | 提供給您編譯用的範例程式,我們假設這個檔案存為`test.pas`: | |
| 108 | + | ||
| 109 | + | program test; | |
| 110 | + | ||
| 111 | + | {$apptype console} | |
| 112 | + | ||
| 113 | + | var | |
| 114 | + | Str: string; | |
| 115 | + | begin | |
| 116 | + | WriteLn('Software Developed with:'); | |
| 117 | + | WriteLn('The Free Pascal Compiler'); | |
| 118 | + | WriteLn(''); | |
| 119 | + | WriteLn('Please, enter your name:'); | |
| 120 | + | ReadLn(Str); | |
| 121 | + | WriteLn('Your name is: ' + Str); | |
| 122 | + | end. | |
| 123 | + | ||
| 124 | + | 要編譯`test.pas`這個程式的命令為: | |
| 125 | + | ||
| 126 | + | `ppcrossarm test.pas` | |
| 127 | + | ||
| 128 | + | 編譯完成後,會產生一個名為`test.exe`的執行檔,請將之複製到您的Windows CE模擬裝置上面來執行。 | |
| 129 | + | ||
| 130 | + | [這裡](http://wiki.lazarus.freepascal.org/Windows_CE_Interface/zh_TW#.E8.9E.A2.E5.B9.95.E6.88.AA.E5.9C.96)提供了一些用這個方式建置出來的應用程式的螢幕截圖。 | |
| 131 | + | ||
| 132 | + | ## 為WinCE應用程式進行偵錯 | |
| 133 | + | ||
| 134 | + | GDB可以透過ActiveSync對您的WinCE應用程式進行遠端偵錯,您可以從這個網址下載Win32平台上對arm-wince模擬器進行偵錯的GDB 6.4: <ftp://ftp.freepascal.org/pub/fpc/contrib/cross/gdb-6.4-win32-arm-wince.zip> | |
| 135 | + | ||
| 136 | + | **幾個提示:** | |
| 137 | + | ||
| 138 | + | - 在執行GDB的時候,請加上`--tui`這個參數,這樣一來,GDB的偵錯圖形介面就會出現,這會讓您的偵錯更舒適一點。 | |
| 139 | + | - 在您的Pascal原始碼裡面,換行符號只能使用Unix的換行符號(LF),不然GDB會回報說原始碼有錯。 | |
| 140 | + | ||
| 141 | + | **如何使用:** | |
| 142 | + | ||
| 143 | + | 首先,把您的Pocket PC模擬裝置進行”連接底座”的程序,好跟ActiveSync進行連線。 | |
| 144 | + | ||
| 145 | + | 然後啟動gdb: | |
| 146 | + | ||
| 147 | + | `gdb --tui <位於您電腦上的執行檔>` | |
| 148 | + | ||
| 149 | + | 如果您要使用提示字元模式進行偵錯,則請在GDB的提示字元中直接輸入: | |
| 150 | + | ||
| 151 | + | `run`或是`r` | |
| 152 | + | ||
| 153 | + | GDB會把您的執行檔複製到模擬裝置上的`\gdb`目錄,並開始執行它。 | |
| 154 | + | ||
| 155 | + | 以下是最常用的幾個GDB命令與縮寫: | |
| 156 | + | ||
| 157 | + | - `r 參數` - 執行程式,並把參數傳遞給要偵錯的程式。 | |
| 158 | + | - `s` - 單步執行-進入副程式. | |
| 159 | + | - `n` - 單步執行. | |
| 160 | + | - `ni` - 單步執行,直接跨越組合語言指令。 | |
| 161 | + | - `c` - 繼續執行程式 (直接執行,不會再繼續單步執行了) | |
| 162 | + | - `br <函式名稱>` - 在`function_name`上設定一個中斷點。使用`PASCALMAIN`就可以在程式開始的地方設定中斷點。 | |
| 163 | + | - `br <原始碼檔案名稱>:<行號>` - 在指定檔案的第幾行上面直接設定中斷點。 | |
| 164 | + | - `disas` - 顯示當前位置的組合語言指令碼(進行反組譯)。 | |
| 165 | + | - `x/fmt 記憶體位址` - 用指定的格式把該記憶體位址的資料顯示出來。您可以輸入"help x"來讀取更多跟顯示格式相關的資訊。 | |
| 166 | + | - `bt` - 反向偵測,把呼叫堆疊(call stack)裡面的資料顯示出來。 | |
| 167 | + | - `where` - 顯示當前的這一行是屬於哪個函式,以及呼叫目前這個函式的呼叫者是誰。 | |
| 168 | + | - `q` - 離開gdb. | |
| 169 | + | ||
| 170 | + | 您也可以在以下網址參閱它的說明文件: <http://www.gnu.org/software/gdb/documentation> | |
| 171 | + | ||
| 172 | + | ## 建置FPC函式庫 | |
| 173 | + | ||
| 174 | + | 如果您要把FPC的函式庫建置出Arm-WinCE版本的話,請切換到函式庫的目錄,並執行以下指令: | |
| 175 | + | ||
| 176 | + | PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\fpc\compiler;C:\Programas\arm | |
| 177 | + | make OS_TARGET=wince CPU_TARGET=arm PP=ppcrossarm.exe | |
| 178 | + | ||
| 179 | + | 舉例來說,如果您要建置FCL,請切換到`fpc\fcl`目錄,然後執行上面的指令,建置完成後,Arm-WinCE版本的FPC函式庫就會建置在`fpc\fcl\units\arm-wince`目錄裡面了。 | |
| 180 | + | ||
| 181 | + | ## 說明文件 | |
| 182 | + | ||
| 183 | + | ### 一些跟WinCE相關的註記 | |
| 184 | + | ||
| 185 | + | - 如果您發生無法辨識的錯誤: "Uknown error! Error code : 0xc1",而在發生這錯誤時,是有使用dll的話,這錯誤可能是因為使用了該dll所開放的某些函式,請確認該dll檔的export區段,以及您使用到的函式名稱是否正確。 | |
| 186 | + | ||
| 187 | + | ### WinCE 移植註記 | |
| 188 | + | ||
| 189 | + | - **`chdir`**這個函式永遠都會錯誤,因為WinCE並沒有提供當前所在目錄的功能。 | |
| 190 | + | - 要描述到所有檔案的時候,一定必須是絕對路徑(從\開始) | |
| 191 | + | - WinCE是個Unicode的OS,所有在API裡面使用到的字串參數,其型別一定得是PWideChar) | |
| 192 | + | - WinCE並不支援環境變數。 | |
| 193 | + | - WinCE預設並不支援命令提示字元模式的應用程式,但您可以自己安裝一些套件,讓它支援命令提示字元。所以請記得,FPC為WinCE建立的專案預設都是圖形介面的應用程式,如果您要建立命令提示字元的應用程式,您得自己在執行編譯器的時候加上`-WC`這個參數,或者在主程式原始碼檔案裡面加入`{$APPTYPE CONSOLE}`這個關鍵字。\ | |
| 194 | + | ||
| 195 | + | 要讓WinCE能支援命令提示字元模式,您必須要安裝下列程式的其中之一: | |
| 196 | + | ||
| 197 | + | - - 由SymbolicTools 提供的**PocketCMD**,我們也推薦您安裝這個程式,可以從[這裡](http://www.symbolictools.de/public/pocketconsole/applications/PocketCMD)取得。 | |
| 198 | + | - 微軟所提供的**PPC Command Shell**,它是Microsoft Windows Mobile Developer Power Toys的一部分,您可以從 [這裡取得](http://www.microsoft.com/downloads/details.aspx?FamilyID=74473fd6-1dcc-47aa-ab28-6a2b006edfe9&displaylang=en)\ | |
| 199 | + | ||
| 200 | + | PPC Command Shell的功能比PocketCMD少,而且還有些問題。執行上述兩個程式的時候,不管原來是否已經有命令模式字元視窗在執行中,都會開啟一個新的命令模式字元視窗。 | |
| 201 | + | ||
| 202 | + | - - 要讓Windows Mobile 5跟6使用命令提示字元輸出,請把登錄值作以下的設定:"HKEY_LOCAL_MACHINE\Drivers\Console\OutputTo" to 0. | |
| 203 | + | ||
| 204 | + | ## 參考文件 | |
| 205 | + | ||
| 206 | + | - [[Tested Unstable Revisions|還沒穩定的版本]] | |
| 207 | + | - [Lazarus的Windows CE應用程式介面](http://wiki.lazarus.freepascal.org/Windows_CE_Interface/zh_TW) | |
| 208 | + | - [Windows CE開發筆記](http://wiki.lazarus.freepascal.org/Windows_CE_Development_Notes/zh_TW) | |
| 209 | + | - [[KOL-CE|KOL GUI函式庫移植給WinCE使用]] | |
| 210 | + | ||
| 211 | + | ## 相關連截 | |
| 212 | + | ||
| 213 | + | - 有用的WinCE相關資訊 <http://www.rainer-keuchel.de/documents.html> | |
| 214 | + | - 微軟提供的模擬器獨立發形版本,它會模擬使用ARM CPU的PDA裝置,請從[此處](http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=dd567053-f231-4a64-a648-fea5e7061303)下載。 | |
| 215 | + | - Mamaich提供,能建立WinCE版應用程式的GCC GCC <http://mamaich.uni.cc> | |
| 216 | + | - [Buildfaq](http://www.stack.nl/~marcov/buildfaq.pdf)一般的常見問答,關於如何建置跟設定FPC。 | |
| 217 | + | ||
| 218 | + | 以下是跟ARM CPU架構相關的一些文件: | |
| 219 | + | ||
| 220 | + | - [ARM核心開發論壇](http://www.armcorepro.com/) 討論中的文章不太多。 | |
| 221 | + | - [GCC ARM增強專案](http://www.inf.u-szeged.hu/gcc-arm/) | |
| 222 | + | - [ARM組譯程式](http://www.heyrick.co.uk/assembler/index.html) 與ARM CPU的組合語言相關的資訊跟程式碼。 | |
| 223 | + | - [GNU ARM工具組,對應Cygwin, Linux跟MacOS](http://www.gnuarm.com/) | |
| 224 | + | - [Microsoft Windows CE .NET 4.2 ARM 開發手冊](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcechp40/html/ccrefarmguide.asp) | |
| 225 | + | - [ARM指令集與程式](http://soc.csie.ndhu.edu.tw/source/intro_embedded/ch2-arm-2.ppt)提供了關於ARM架構的詳細資料。 | |
| 226 | + | - [ARM指令集](http://web.njit.edu/~baltrush/arm_stuff/ARMInst.ppt)是一個說明ARM指令的PPT檔 | |
| 227 | + | ||
| 228 | + | ## 貢獻與聯繫 | |
| 229 | + | ||
| 230 | + | 如果您有任何跟WinCE移植相關的問題,請與[Yury Sidorov](mailto:yury_sidorov@mail.ru)連繫(只能寫英文喔, 他是俄羅斯人) | |
| 231 | + | ||
| 232 | + | - 初版正體中文翻譯,以及Device Emulator 2.0等相關資訊,由[元智大學](http://www.yzu.edu.tw/)[資訊傳播學系](http://www.infocom.yzu.edu.tw/)兼任講師[張子仁 (Dennies Chang)](mailto://dennies@ms4.hinet.net)製作。 - 2008/1/7 User:Dennies | |
| 233 | + | ||
| 234 | + | --- | |
| 235 | + | *From the Free Pascal wiki, page "WinCE port/zh TW", as it stood on 2008-01-07 after a change by Dennies, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
