Огляд розміру складеного коду


9

Коли я компілюю свій код, Arduino IDE повертає двійковий розмір ескізу в байтах.

Чи є хороший спосіб дізнатися (приблизно), яка функція або яка частина мого коду займає кількість пам'яті у спалах, щоб я відчував, яка функція займає більшу частину дорогоцінної флеш-пам’яті або де я можу витрачати спалах і повинен почати оптимізувати?

Відповіді:


6

Один із підходів полягає в тому, щоб переглянути перелік складання програми.

  1. Після компіляції програми (за допомогою кнопки Підтвердити або Завантажити) знайдіть каталог, де зберігаються файли .cpp, .hex та .elf для програми. (Якщо у вас виникли проблеми з їх пошуком, коротко увімкніть параметри детальної компіляції в IDE arduino та перегляньте назви каталогів у висновку.)

  2. У цьому каталозі запустіть avr-objdump -S fn.cpp.elf, > listing.txt де fn.cpp.elf - це назва вашого ескізу, .inoзнятого та .cpp.elfдоданого в кінці. Наприклад, з ескізом serialecho.ino:

    avr-objdump -S serialecho.cpp.elf> listing.txt

  3. Перегляньте listing.txtфайл і відніміть початкову адресу кожної функції від її кінцевої адреси, використовуючи шестигранну арифметику. Наприклад, з setupкодом

    настройка недійсності () {Serial.begin (9600); }

у переліку ми побачимо

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>:

Обчислення 0x154–0x144 = 0x10 показує, що ця частина setupстановить 16 байт.

Ці приклади були створені в системі Linux. Я думаю, що підхід у системі MSWindows однаковий, за винятком того, що вам потрібно буде сказати avr-objdump.exeзамість цього avr-objdump, і, можливо, потрібно буде вказати його шлях. Дивіться, наприклад, результати Assemler, де? нитка на forum.arduino.cc.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.