Sign in Join
Wiki copytemporary

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

OldNewLine
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).*

Back to history