Olá galera, meu nome é Filipe e hoje iremos analisar o avr-objcopy.
Topicos a serem analisados de acordo minha pessoa são:
1 – Para que serve?
2 – O que siguinifica cada parametro?
No primeiro artigo da serie Instalando a Toolchain para AVR vimos o comando para gerar o arquivo .hex para podermos gravar no nosso microcontrolador:
avr-objcopy -j .text -j .data -O ihex blink.out blink.hex
O avr-objcopy ao pé da letra realiza uma “copia” do arquivo objeto gerado na compilação pelo avr-gcc em um novo tipo de arquivo, fazendo uma “tradução” do mesmo para o arquivo final desejado.
Vamos tentar ler o arquivo objeto resultado da compilação do blink.c o blink.out usando o programa objdump:
objdump -x blink.out
Como observamos o codigo gerado é dificil de ser interpretado por humanos.
Ao analisar o arquivo observamos conceitos importantes como os simbolos, .data e .text que se trata respectivamente das variaveis usadas no programa e das instruções a serem executadas.
Indo ao que interessa vamos analisar os parâmetros passados ao programa
-j : Como se trata de um programa simples com pouca informação vimos que não foi importante a retirada de “pedaços” específicos do código. Agora imagine um projeto com um código de 30Kbytes, seria uma loucura manter seções desnecessárias ao seu arquivo final como “.debug” por exemplo.
Então o que faz o parâmetro -j é especificar que parâmetros serão traduzidos no nosso caso somente o .data e .text. Muito cuidados ao usar esse parâmetro pois seu uso inapropriado pode gerar um arquivo inútil.
Para vias de aprendizado experimente usar o comando:
avr-objcopy -O ihex blink.out blink2.hex
E compare o arquivo .hex gerado com o código completo.
Ai esta a diferença.
-O: Aqui chegamos a geração do nosso arquivo de sai da.
Como já foi descrito o avr-obcopy apenas traduz um arquivo objeto para um arquivo especificado.O parametro “-O” ira receber um arquivo fonte no caso o blink.out e o traduzira para o formato ihex gravando a saída no arquivo blink.hex.
O formato ihex se trata do intel HEX que guarda dados binários em forma ASCII que torna o arquivo legível e é suportado pela maioria dos gravadores no mercado.
Bom pessoal aqui encerramos nosso artigo porem o estudo continua pois o mundo do GCC é enorme e não seria possível resumir o mesmo em pequenos artigos. Boa sorte e até o próximo.
Fontes:
man avr-objcopy
http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__demo__project_1demo_ihex.html
https://en.wikipedia.org/wiki/Intel_HEX