Embedded/zh TW
│
English (en) │
español (es) │
中文(中国大陆) (zh_CN) │
中文(臺灣) (zh_TW) │
對嵌入式target(目標作業系統,目標架構)的支援正在開發中,只支援少數控制器。儘管如此,為嵌入式arm設備做程式還是可行的。嵌入式target沒有作業系統,只有幾kB的RAM和幾十kB的flash。一個典型的target就是NXP公司的LPC家族的流行的設備諸如LPC2124,它擁有16kB的RAM和256kB的flash,使用ARM7的指令集。
嵌入式移植
狀態
- 僅僅在svn上的2.3.1版本才能得到可用的支持
- 當前僅有arm嵌入式設備得到支援
- 當前支持的控制器僅限於NXP LPC和ATMEL AT91控制器。如果你有興趣對其他控制器提供支援,請在這兒捐獻你的代碼fpc-devel mailing list然後寫封信使得我們可以討論是否加入這個支援。
ARM嵌入式
構建
從svn上獲取最新的FPC源碼:
svn co http://svn.freepascal.org/svn/fpc/trunk fpc
獲取ARM嵌入式binutils。
對於windows,他們可以在 http://svn.freepascal.org/svn/fpcbuild/binaries/i386-win32 得到。你可以checkout所有的目錄或者僅僅手工下載arm-embedded-ar.exe,arm-embedded-as.exe,arm-embedded-ld.exe,arm-embedded-strip.exe,arm-embedded-objdump.exe和arm-embedded-objcopy.exe。把這些utils放到被PATH變數包含的目錄。
編譯FPC對arm-embedded的支持:
cd fpc make clean buildbase installbase CROSSINSTALL=1 OS_TARGET=embedded CPU_TARGET=arm
以上的命令僅僅編譯編譯器和rtl,因為受限於嵌入式系統的性能編譯所有的包是無意義的。不管怎樣,要小心不要覆蓋了已經存在於系統上的arm編譯器。如果這可能發生,INSTALL_PREFIX必須被指定,以使得新構建出的編譯器被放入另一個檔夾。
測試
你可以在下面找到一個簡單的示例程式。按照說明把它保存到tled1.pp。這個程式是為諸如LOIMEX的LPC-WEB(http://www.olimex.com/dev/lpc-e2124.html)之類的開發板寫的。當你按下鍵1,led1就會同時亮起來。同樣的,按下鍵2,然後led2亮起來。
procedure Wait(d : dword);
begin
while d<>0 do
dec(d);
end;
begin
{ 初始化PLL }
InitPLL(2,1);
{ 初始化LEDs }
{ 埠 0.8: output }
TBitvector32(GPIO0_IODIR)[8]:=1;
{ 埠 0.10: output }
TBitvector32(GPIO0_IODIR)[10]:=1;
{ 關閉兩個LEDs }
TBitvector32(GPIO0_IOSET)[8]:=1;
TBitvector32(GPIO0_IOSET)[10]:=1;
{ 初始化鍵盤輸入 }
{ 埠 0.9: input }
TBitvector32(GPIO0_IODIR)[9]:=0;
{ 埠 0.15: input }
TBitvector32(GPIO0_IODIR)[15]:=0;
{ 閉環 }
while true do
begin
{ 鍵 1 被按下 }
if TBitvector32(GPIO0_IOPIN)[15]=0 then
begin
{ 打開 LED, 置反邏輯 }
TBitvector32(GPIO0_IOCLR)[8]:=1;
{ 等待 }
Wait(500000);
{ 關閉 LED, 置反邏輯 }
TBitvector32(GPIO0_IOSET)[8]:=1;
end;
{ 鍵 2 被按下 }
if TBitvector32(GPIO0_IOPIN)[9]=0 then
begin
{ 打開 LED, 置反邏輯 }
TBitvector32(GPIO0_IOCLR)[10]:=1;
{ 等待 }
Wait(500000);
{ 關閉 LED, 置反邏輯 }
TBitvector32(GPIO0_IOSET)[10]:=1;
end;
end;
end.
如果FPC arm-embedded已經如上述所說,被正確安裝了,這個程式可以這樣來編譯:
fpc -Parm -Tembedded -Wplpc2124 tled1.pp
其中:
-Parm
告訴編譯器以arm作為目標架構編譯
-Tembedded
告訴編譯器為嵌入式平臺編譯
-Wplpc2124
告訴編譯起為NXP LPC 2124編譯。這樣做有兩個作用:首先,一個單元(在這裏是lpc21x4)包含了啟動代碼和埠配置。控制器的定義也被載入。其次,編譯器可以使用一個適合這個控制器的鏈結腳本。
最後得到一個可用於NXP flash編程器的 .hex 文件。
加入新的控制器
加入一個新的控制器需要基本的三個步驟:首先,擴展編譯器以使得它能識別控制器的名字。然後加入一個鏈結腳本。最後創建一個包含註冊的定義和啟動代碼的rtl單元。
為編譯器增加控制器類型
為編譯器增加鏈結腳本
創建一個包含註冊的定義和啟動代碼的rtl單元
有用的鏈結
- http://de.wikipedia.org/wiki/Intel_HEX
- http://www.nxp.com/products/microcontrollers/support/software_download/lpc2000/
- http://www.nxp.com/acrobat_download/usermanuals/UM10114_3.pdf
- Jim Lynch: Using Open Source Tools for AT91SAM7 Cross Development - Revision B http://www.atmel.com/dyn/resources/prod_documents/atmel_tutorial_source.zip