Difference between revisions of "AVR"

From Free Pascal wiki
Jump to navigationJump to search
(→‎Building Cross compiler: Retrieving bintutils and make options)
m (→‎Resources: Add link)
(22 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{Platform only|Arduino|Arduino|Arduino boards}}
+
{{AVR(pg)}}
== General information ==
+
 
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.  
+
{{Warning|The FPC-AVR port is experimental and might be broken from time to time. If this is the case, please fill a [http://bugs.freepascal.org bug report]}}
 +
 
 +
'''FPC-AVR''' is the [[FPC|Free Pascal Compiler]] port for the AVR microcontroller. It uses the GCC AVR tool chain and will be compatible with GCC regarding calling conventions etc.
 +
 
 +
For instructions on how to program AVR's with Free Pascal, see the article [[AVR Programming]].
  
 
== Implementation details ==
 
== Implementation details ==
  
FPC considers AVR being a 16 bit CPU. So the type tregister actually describes a register pair being the second register implicitly named.
+
FPC considers AVR to be a 16 bit CPU. So the type TRegister actually describes a register pair with the second register implicitly named.
  
== Building Cross compiler ==
+
== Building cross-compiler ==
  
There are some requirements, you should know about
+
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.
 
* You should use the latest Free Pascal sources as there is the most recent support for more controllers.
 
* Binutils for avr target
 
* 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.
+
** Microchip (previously Atmel) provides bintuils binaries for Linux, macOS (Darwin) and Windows.<br />[https://www.microchip.com/mplab/avr-support/avr-and-arm-toolchains-c-compilers Download] using 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.
+
** On a Linux host, you may either install binutils for the avr target from your distribution or use also the binaries provided by Microchip (previously 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
+
** You may also use the binutils distributed with the Arduino IDE; on Windows they are installed to eg 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.
+
** Keep in mind that the Free Pascal Compiler will search for eg 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>
 
** You may need to set FPC's command line switch -FD<directory with binutils>
* Latest ''stable'' Free Pascal Compiler
+
* Latest ''stable'' Free Pascal Compiler.
  
Then you can build your cross compiler. Please choose SUBARCH according to your Arduino board / AVR microprocessor.
+
Then you can build your cross compiler. Please choose SUBARCH according to your Arduino board / AVR microcontroller.
  
<code lang="shell">
+
<syntaxhighlight lang="bash">
 
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
 
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
</code>
+
</syntaxhighlight>
  
You may also set the bintuils prefix for this (equivialent to -XP switch)
+
You may also set the binutils prefix for this (equivalent to the '''-XP''' switch)
  
<code lang="shell">
+
<syntaxhighlight lang="bash">
 
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-
 
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-
</code>
+
</syntaxhighlight>
  
 
== Subarchitecture ==
 
== Subarchitecture ==
  
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.
+
The operating system target ''embedded'' requires that you specify a subarchitectures when building a cross compiler. The subarchitectures are compatible with the ones used by GCC.
 
 
There is a list at: http://www.nongnu.org/avr-libc/user-manual/using_tools.html
 
  
 
== Resources ==
 
== Resources ==
* 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)
 
  
[[Category:Embedded]]
+
* [https://www.microchip.com/mplab/avr-support/atmel-studio-7 Atmel Studio 7]
[[Category:Operating Systems and Platforms]]
+
* [https://www.microchip.com/mplab/avr-support/avr-and-sam-downloads-archive Downloads Archive for AVR tools]
[[Category:Arduino]]
+
* [http://en.wikipedia.org/wiki/Atmel_AVR General information about Atmel AVR in Wikipedia]  
 +
* [http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage Calling conventions]
 +
* [http://www.nongnu.org/avr-libc/user-manual/using_tools.html list of subarchitectures]
 +
* [http://www.lazarusforum.de/viewtopic.php?f=9&t=5444&start=30 Discussion on lazarusforum.de (German)]
 +
* [[AVR Programming]]
 +
* [[Arduino]]
 +
* [[AVR Embedded Tutorial|AVR Embedded Tutorials]] - Tutorials with code examples

Revision as of 13:09, 23 July 2020

English (en)

Warning-icon.png

Warning: The FPC-AVR port is experimental and might be broken from time to time. If this is the case, please fill a bug report

FPC-AVR is the Free Pascal Compiler port for the AVR microcontroller. It uses the GCC AVR tool chain and will be compatible with GCC regarding calling conventions etc.

For instructions on how to program AVR's with Free Pascal, see the article AVR Programming.

Implementation details

FPC considers AVR to be a 16 bit CPU. So the type TRegister actually describes a register pair with 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
    • Microchip (previously Atmel) provides bintuils binaries for Linux, macOS (Darwin) and Windows.
      Download using the appropriate link for your operating system]
    • On a Linux host, you may either install binutils for the avr target from your distribution or use also the binaries provided by Microchip (previously Atmel).
    • You may also use the binutils distributed with the Arduino IDE; on Windows they are installed to eg C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\bin
    • Keep in mind that the Free Pascal Compiler will search for eg 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 microcontroller.

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 binutils prefix for this (equivalent to the -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-

Subarchitecture

The operating system target embedded requires that you specify a subarchitectures when building a cross compiler. The subarchitectures are compatible with the ones used by GCC.

Resources