The FPC-AVR port is currently experimental and non working. It uses the GCC AVR tool chain and will be compatible with GCC regarding calling conventions etc.
FPC considers AVR being a 16 bit CPU. So the type tregister actually describes a register pair being the second register implicitly named.
Building Cross compiler
There are some requirements, you should know about
- You should use the latest Free Pascal sources as there is the most recent support for more controllers.
- Binutils for avr target
- Atmel provides bintuils binaries for Linux, Mac OS X and Windows. Please visit http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.5.0/ (registration required) and follow the appropriate link for your operating system.
- On Linux host, you may either install bintuils for avr target from your distribution or use also the binaries provided by Atmel.
- You may also use the bintuils distributed with the Arduino IDE; on Windows they are installed to e.g. C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\bin
- Keep in mind, the Free Pacal Compiler will search for e.g. avr-embedded-as. So you must either rename the binary files, create symlinks (on Linux only) or adjust command line switch -XP<prefix> for FPC.
- You may need to set FPC's command line switch -FD<directory with binutils>
- Latest stable Free Pascal Compiler
Then you can build your cross compiler. Please choose SUBARCH according to your Arduino board / AVR microprocessor.
make buildbase installbase CPU_TARGET=avr OS_TARGET=embedded SUBARCH=avr5 CROSSINSTALL=1 INSTALL_PREFIX=~/fpc NOGDB=1 PP=/usr/bin/fpc CROSSBINDIR=/usr/avr/bin
You may also set the bintuils prefix for this (equivialent to -XP switch)
make buildbase installbase CPU_TARGET=avr OS_TARGET=embedded SUBARCH=avr5 CROSSINSTALL=1 INSTALL_PREFIX=~/fpc NOGDB=1 PP=/usr/bin/fpc CROSSBINDIR=/usr/avr/bin BINUTILSPREFIX=avr-
The operating system target embedded requires you to specify a aubarchicture when building a cross compiler. The subarchitectures are compatible to the ones used by gcc.
There is a list at: http://www.nongnu.org/avr-libc/user-manual/using_tools.html
- General information: http://en.wikipedia.org/wiki/Atmel_AVR
- Atmel site: http://www.atmel.com/products/microcontrollers/avr/default.aspx
- Calling conventions: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage
- Discussion on: http://www.lazarusforum.de/viewtopic.php?f=9&t=5444&start=30 (German)