O seu programa está grande demais? Muito lento para gravar o microcontrolador? Não cabe na memória? Vamos reduzir o programa!
Há alguns truques simples para reduzir o tamanho dos programas e, se não está utilizando todos, as chances são que seu executável está maior do que o necessário.
Vejamos como podemos reduzir o tamanho do programa gerado pelo compilador.
Otimizações para reduzir o programa
A primeira forma de reduzir o tamanho do programa é habilitar as otimizações que reduzem o tamanho do programa.
Para isso basta fornecer a opção -Os para o compilador. “O” vem de otimizar e “s” vem de size (tamanho).
avr-gcc -mmcu=atmega328p -Os -c -o main.o main.c
Outros níveis de otimização
Há vários níveis de otimização que podem ser utilizados:
- -O0 Zero otimizações (padrão do compilador). Muito utilizado para debug programas. Gera executáveis extremamente grandes e lentos na execução.
- -Og Apenas otimizações que não afetam o debug.
- -O1 Otimizações básicas.
- -O2 Mais otimizações. Pode aumentar o tamanho do programa comparado com -O1.
- -O3 Todas as otimizações. Pode aumentar o tamanho do programa comparado com -O2.
- -Os Apenas otimizações que reduzem o tamanho do código.
Remover funções não executadas
A segunda forma de reduzir o executável é instruir ao compilador e linkador para removerem as funções que não são chamadas no código (chamadas de código morto – dead code).
Para isso devemos fornecer opções ao compilador e ao linkador.
Para o compilador fornecemos as opções -fdata-sections -ffunction-sections. Isso faz com que o compilador coloque cada função em uma seção separada.
avr-gcc -mmcu=atmega328p -fdata-sections -ffunction-sections -Os -c -o main.o main.c
Para o linkador fornecemos a opção -Wl,–gc-sections. Isso faz com que o linkador remova as seções não utilizadas.
avr-gcc -mmcu=atmega328p -o exec.elf main.o -Wl,--gc-sections
Caso esteja compilando e linkando no mesmo comando, basta inserir ambas as opções.
avr-gcc -mmcu=atmega328p -fdata-sections -ffunction-sections -Os -o exec.elf main.cpp -Wl,--gc-sections
Verificando o tamanho do executável
Verificar o tamanho do executável é muito simples. Basta utilizamos a ferramenta avr-size e passar o arquivo elf gerado pelo compilador.
avr-size exec.elf
Leia mais:
Veja mais posts da Categoria Programação!