Derlenmiş kod boyutuna genel bakış


9

Kodumu derlediğimde, Arduino IDE bayt cinsinden ikili çizim boyutunu döndürür.

Hangi fonksiyonun veya kodumun hangi kısmının flaşta ne kadar bellek kapladığını bulmanın iyi bir yolu var mı, böylece hangi özellikin değerli flaş belleğin çoğunu aldığını veya nerede flaş harcayacağımı ve optimizasyona başla?

Yanıtlar:


6

Bir yaklaşım, programın derleme listesine bakmaktır.

  1. Programı derledikten sonra (Doğrula veya İndir düğmesiyle) programın .cpp, .hex ve .elf dosyalarının saklandığı dizini bulun. (Bunları bulmakta sorun yaşıyorsanız, arduino IDE'deki ayrıntılı derleme seçeneklerini kısaca açın ve çıktıdaki dizin adlarına bakın.)

  2. Bu dizinde, avr-objdump -S fn.cpp.elf komutunu çalıştırın ;> listing.txt burada fn.cpp.elf , çiziminizin sonuna .inoalınan ve .cpp.elfsonuna eklenecek olan adıdır . Örneğin, çizim ile serialecho.ino:

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

  3. listing.txtDosyayı görüntüleyin ve onaltılık aritmetik kullanarak her işlevin başlangıç ​​adresini bitiş adresinden çıkarın. Örneğin, setupkod ile

    void setup () {Serial.begin (9600); }

listede göreceğiz

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 hesaplaması, bu bölümün setup16 bayt uzunluğunda olduğunu gösterir.

Bu örnekler bir linux sistemi üzerinde üretilmiştir. Bir MSWindows sisteminde yaklaşımın aynı olduğunu düşünüyorum, avr-objdump.exebunun yerine söylemeniz avr-objdumpgerekebilir ve yolunu belirtmeniz gerekebilir. Örneğin, Assemler sonuçlarına bakın, nerede? forum.arduino.cc adresindeki iş parçacığı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.