terça-feira, maio 15, 2012

Programação em C no AVR: O avr-gcc Toolchain

A linguagem C é a mais comum de ser utilizada no desenvolvimento de programas para microcontroladores AVR. Uma opção bastante popular é o uso do avr-gcc toolchain, que é usada inclusive na IDE do Arduino.

Um Pouco de Teoria


A figura abaixo (adaptada do avrfreaks wiki) mostra os diversos passos e programas envolvidos na geração de um arquivo hex (para gravação em um AVR) a partir dos fontes em C.



O compilador C transforma os fontes em C em fontes em linguagem assembly. Estes fontes são convertidos pelo assembler em arquivos objeto. O linker junta os vários arquivos objeto com as bibliotecas (particularmente a avr-libc) e o código de iniciação, gerando um executável em formato elf. Por último, o utilitário objcopy transforma o executável elf nos bytes a gravar, no formato hex.

Nomenclatura

Chama-se de avr-gcc toolchain o conjunto da ferramentas envolvidas na geração do HEX a partir dos fontes em C, mais alguns outros utilitários como o nosso velho amigo avrdude.

Normalmente nos referimos ao compilador como sendo o avr-gcc. gcc é o GNU Compiler Collection, um conjunto de compiladores desenvolvidos como parte do projeto GNU (GNU is Not Unix). avr-gcc é uma adaptação de parte do gcc para gerar código para os microcontroladores AVR. É o que chamamos de um cross-compiler: roda em um processador para gerar código para outro.

O que pode causar confusão é que o comando avr-gcc não é exatamente o compilador: ele é apenas um programa de controle, que dispara o pré-processador (cpp), o compilador (cc1), co assembler (as) e o linker (ld), dando a impressão que gerar direto o executável elf. Por outro lado, existem projetos separados para o desenvolvimento do compilador (gcc), dos utilitário diretamente ligados a ele (binutils), à biblioteca de apoio (avr-libc) e a cada um dos outros utilitários (como o avrdude).

Obtendo e instalando o avr-gcc toolchain

Se você usa Windows, baixe e instale o WinAvr. Se você usa GNU/Linux, aqui tem alguns links. Para os usuários Mac, o site da ladyada tem um tutorial (o site também tem tutoriais para Windows e Linux).

No próximo post começaremos a ver como usar o avr-gcc toolchain.

Alguns links sobre o avr-gcc toolchain:

http://www.nongnu.org/avr/
http://www.nongnu.org/avr-libc/
http://www.gnu.org/software/binutils/
http://www.avrfreaks.net/wiki/index.php/Documentation:AVR_GCC
http://www.avrfreaks.net/wiki/index.php/Documentation:AVR_GCC/AVR_GCC_Tool_Collection

Nenhum comentário: