Menu Close

Toolchain Overview


The development toolset for Atmel AVR is not a single setup or software which you can use for your all need, probably you need a set of development tools to accomplish your task.

It takes many tools working together and the combination of these tools referred as toolset or toolchain, as these chained tools help to produce the final application file for the AVR Microcontroller.

There are several developers who using cross-compilers that provide everything with a simple GUI front end software but there’s a lot happening in the back end, so hopefully after reading this article you get to know some insight.


GCC stands for GNU Compiler Collection. GCC is highly flexible compiler system. It has different compiler front-ends for different languages. It has many back-ends that generate assembly code for many different processors and host operating systems. All share a common “middle-end”, containing the generic parts of the compiler, including a lot of optimizations.

In GCC, a host system is the system (processor/OS) that the compiler runs on. A target system is the system that the compiler compiles code for. And, a build system is the system that the compiler is built (from source code) on. If a compiler has the same system for host and for target, it is known as a native compiler. If a compiler has different systems for host and target, it is known as a cross-compiler. (And if all three, buildhost, and target systems are different, it is known as a Canadian cross compiler, but we won’t discuss that here.) When GCC is built to execute on a host system such as FreeBSD, Linux, or Windows, and it is built to generate code for the AVR microcontroller target, then it is a cross compiler, and this version of GCC is commonly known as “AVR GCC”. In documentation, or discussion, AVR GCC is used when referring to GCC targeting specifically the AVR, or something that is AVR specific about GCC. The term “GCC” is usually used to refer to something generic about GCC, or about GCC as a whole.

GCC is different from most other compilers. GCC focuses on translating a high-level language to the target assembly only. AVR GCC has three available compilers for the AVR: C language, C++, and Ada. The compiler itself does not assemble or link the final code.

GCC is also known as a “driver” program, in that it knows about, and drives other programs seamlessly to create the final output. The assembler, and the linker are part of another open source project called GNU Binutils. GCC knows how to drive the GNU assembler (gas) to assemble the output of the compiler. GCC knows how to drive the GNU linker (ld) to link all of the object modules into a final executable.

The two projects, GCC and Binutils, are very much interrelated and many of the same volunteers work on both open source projects.

When GCC is built for the AVR target, the actual program names are prefixed with “avr-“. So the actual executable name for AVR GCC is: avr-gcc. The name “avr-gcc” is used in documentation and discussion when referring to the program itself and not just the whole AVR GCC system.

GNU Binutils

The name GNU Binutils stands for “Binary Utilities”. It contains the GNU assembler (gas), and the GNU linker (ld), but also contains many other utilities that work with binary files that are created as part of the software development toolchain.

Again, when these tools are built for the AVR target, the actual program names are prefixed with “avr-“. For example, the assembler program name, for a native assembler is “as” (even though in documentation the GNU assembler is commonly referred to as “gas”). But when built for an AVR target, it becomes “avr-as”.

Building Software

Even though GCC, Binutils, and avr-libc are the core projects that are used to build software for the AVR, there is another piece of software that ties it all together: Make. GNU Make is a program that makes things, and mainly software. Make interprets and executes a Makefile that is written for a project. A Makefile contains dependency rules, showing which output files are dependent upon which input files, and instructions on how to build output files from input files.

Some distributions of the toolchains, and other AVR tools such as MFile, contain a Makefile template written for the AVR toolchain and AVR applications that you can copy and modify for your application.


After creating your software, you’ll want to program your device. You can do this by using the program AVRDUDE which can interface with various hardware devices to program your processor.

AVRDUDE is a very flexible package. All the information about AVR processors and various hardware programmers is stored in a text database. This database can be modified by any user to add new hardware or to add an AVR processor if it is not already listed.

Source: click here

Leave a Reply

Your email address will not be published. Required fields are marked *