Otázka:
Přehled velikosti kompilovaného kódu
fuenfundachtzig
2015-05-09 16:36:54 UTC
view on stackexchange narkive permalink

Když kompiluji svůj kód, Arduino IDE vrací binární velikost skici v bajtech.

Existuje dobrý způsob, jak (přibližně) zjistit, která funkce nebo jaká část mého kódu zabírá tolik paměti ve flashi, abych měl pocit, jaká funkce zabírá většinu vzácné flash paměti nebo kde Možná ztrácím blesk a měl bych začít optimalizovat?

Jeden odpovědět:
James Waldby - jwpat7
2015-05-09 21:51:19 UTC
view on stackexchange narkive permalink

Jedním z přístupů je podívat se na seznam sestavení programu.

  1. Po kompilaci programu (pomocí tlačítka Ověřit nebo Stáhnout) vyhledejte adresář, kde je soubor .cpp,. soubory hex a .elf pro program byly uloženy. (Pokud je nemůžete najít, krátce zapněte podrobné možnosti kompilace v arduino IDE a podívejte se na názvy adresářů ve výstupu.)

  2. V tomto adresáři spusťte avr-objdump -S fn.cpp.elf > listing.txt , kde fn.cpp.elf je název svůj náčrt s odstraněným .ino a na konci přidaným .cpp.elf . Například pomocí skici serialecho.ino:

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

  3. Prohlédněte si soubor listing.txt a pomocí hex aritmetiky odečtěte počáteční adresu každé funkce od její koncové adresy. Například s setup code

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

v výpis uvidíme

  00000144 <setup>: ... (6 řádků oříznuto) ... 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>:  

Výpočet 0x154–0x144 = 0x10 zobrazuje tuto část nastavení je

Tyto příklady byly generovány v systému Linux. Myslím, že přístup je v systému MSWindows stejný, až na to, že možná budete muset namísto avr-objdump říci avr-objdump.exe a možná budete muset určit jeho cestu. Podívejte se např. Na Assemler results, where? vlákno na forum.arduino.cc.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...