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 .inoretirado e .cpp.elfadicionado no final. Por exemplo, com esboço serialecho.ino:
avr-objdump -S serialecho.cpp.elf> list.txt
Visualize o listing.txtarquivo e subtraia o endereço inicial de cada função do endereço final, usando aritmética hexadecimal. Por exemplo, com setupcó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 setuppossui 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.exevez de avr-objdump, e pode precisar especificar seu caminho. Veja, por exemplo, os resultados da Assemler, onde? tópico em forum.arduino.cc.