Uma abordagem é examinar a lista de montagem do programa.
Após compilar o programa (por meio do botão Verificar ou Baixar), localize o diretório em que os arquivos .cpp, .hex e .elf do programa foram armazenados. (Se você tiver problemas para encontrá-los, ative brevemente as opções detalhadas de compilação no IDE do arduino e consulte os nomes dos diretórios na saída.)
Nesse diretório, execute avr-objdump -S
fn.cpp.elf em > listing.txt
que fn.cpp.elf é o nome do seu esboço .ino
retirado e .cpp.elf
adicionado no final. Por exemplo, com esboço serialecho.ino
:
avr-objdump -S serialecho.cpp.elf> list.txt
Visualize o listing.txt
arquivo e subtraia o endereço inicial de cada função do endereço final, usando aritmética hexadecimal. Por exemplo, com setup
código
void setup () {Serial.begin (9600); }
na lista veremos
00000144 <setup>:
...(6 lines snipped)...
144: 26 e0 ldi r18, 0x06 ; 6
146: 40 e8 ldi r20, 0x80 ; 128
148: 55 e2 ldi r21, 0x25 ; 37
14a: 60 e0 ldi r22, 0x00 ; 0
14c: 70 e0 ldi r23, 0x00 ; 0
14e: 80 e1 ldi r24, 0x10 ; 16
150: 92 e0 ldi r25, 0x02 ; 2
152: db c1 rjmp .+950 ; 0x50a <_ZN14HardwareSerial5beginEmh>
00000154 <loop>:
O cálculo 0x154–0x144 = 0x10 mostra que essa parte setup
possui 16 bytes de comprimento.
Estes exemplos foram gerados em um sistema linux. Eu acho que a abordagem é a mesma em um sistema MSWindows, exceto que você pode precisar dizer em avr-objdump.exe
vez de avr-objdump
, e pode precisar especificar seu caminho. Veja, por exemplo, os resultados da Assemler, onde? tópico em forum.arduino.cc.