Forum: Mikrocontroller und Digitale Elektronik AVRStudio: Anzeige verbrauchter Speicher


von Thomas B. (escamoteur)


Lesenswert?

Hi,

Crossworks zeigt mir für meine STM32 Projekte nach einem Build an, 
wieviel Flash und RAM das aktuelle Projekt verbraucht.
Wie kann ich mir entsprechendes im AVRStudio anzeigen lassen?

Gruß
Thomas

von till (Gast)


Lesenswert?

Nachdem du dein Projekt mit build erstellt hast, müssten die Größen 
unten im Text erscheinen. Klick evtl. mal links unten auf den Button 
"build", falls der Text nicht automatisch aufgeht.

von Thomas B. (escamoteur)


Lesenswert?

Leider nein,

ich bekomme nur diese Ausgabe

------ Rebuild All started: Project: MP3, Configuration: default AVR 
------
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

von Ernst B. (puravida)


Lesenswert?

Bekommst Du nicht den ganzen Sermon im Fenster unten:
1
------ Build started: Project: AVRGCC3, Configuration: Debug AVR ------
2
Build started.
3
Project "AVRGCC3.avrgccproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
Target "CoreBuild" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Users\Ernst\Documents\AVRStudio\AVRGCC3\AVRGCC3\AVRGCC3.avrgccproj" (target "Build" depends on it):
6
  Task "RunAvrGCC"
7
    C:\Program Files\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all 
8
Test_ATmega8.c
9
    Invoking: AVR/GNU C Compiler
10
    "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -funsigned-char -funsigned-bitfields -Os -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99  -mmcu=atmega8   -MD -MP -MF"Test_ATmega8.d" -MT"Test_ATmega8.d" -o"Test_ATmega8.o" ".././Test_ATmega8.c"
11
    Finished building: .././Test_ATmega8.c
12
    Building target: AVRGCC3.elf
13
    Invoking: AVR/GNU C/C++ Linker
14
    "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe"  -mmcu=atmega8  -Wl,-Map=AVRGCC3.map -o AVRGCC3.elf  Test_ATmega8.o  
15
    Finished building target: AVRGCC3.elf
16
    "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature  "AVRGCC3.elf" "AVRGCC3.hex"
17
    "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objdump.exe" -h -S "AVRGCC3.elf" > "AVRGCC3.lss"
18
    "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "AVRGCC3.elf" "AVRGCC3.eep" || exit 0
19
    AVR Memory Usage
20
    ----------------
21
    Device: atmega8
22
    Program:    2058 bytes (25.1% Full)
23
    (.text + .data + .bootloader)
24
    Data:         86 bytes (8.4% Full)
25
    (.data + .bss + .noinit)
26
  Done executing task "RunAvrGCC".
27
Done building target "CoreBuild" in project "AVRGCC3.avrgccproj".
28
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
29
Target "Build" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "C:\Users\Ernst\Documents\AVRStudio\AVRGCC3\AVRGCC3\AVRGCC3.avrgccproj" (entry point):
30
Done building target "Build" in project "AVRGCC3.avrgccproj".
31
Done building project "AVRGCC3.avrgccproj".
32
33
Build succeeded.
34
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

AVR-Sudio 5

LG
Ernst

von Thomas B. (escamoteur)


Lesenswert?

Nein, nur die zwei Zeilen. Ich habe das AVR Studio 5.
Keine Ahnung was da los ist.

von Thomas E. (thomase)


Lesenswert?

Und dafür:

Ernst B. schrieb:
> AVR Memory Usage
>     ----------------
>     Device: atmega8
>     Program:    2058 bytes (25.1% Full)
>     (.text + .data + .bootloader)
>     Data:         86 bytes (8.4% Full)
>     (.data + .bss + .noinit)

sind diese Zeilen im Makefile verantwortlich:

size: ${TARGET}
  @echo
  @avr-size -C --mcu=${MCU} ${TARGET}

mfg.

von Thomas B. (escamoteur)


Lesenswert?

Ich habs gefunden:

Unter
Tools -> Options -> Projects and Solutions -> Build and Run -> MSBuild 
project build output verbosity

muss "Diagnostic" eingetragen sein. Dann bekommt man auch alle Angaben.

Danke & Gruß

Thomas

von Dirk (Gast)


Lesenswert?

Ich hoffe meine Frage passt hier rein.

Wie kann ich dem avr-gcc mitteilen wie groß der Bootloader (bzw. die 
section) ist, um diesen in die Ausgabe der Speicherauslastung mit 
einzubeziehen?

Der nutzbare Speicherplatz wird ja durch Verwendung eines Bootloaders 
verringert (bzw. vergrößert). Ich habe z.B. im aktuellen Projekt einen 
ATMega88 der die Ausgabe liefert:

    AVR Memory Usage
    ----------------
    Device: atmega88
    Program:    7532 bytes (91.9% Full)
    (.text + .data + .bootloader)
    Data:        512 bytes (50.0% Full)
    (.data + .bss + .noinit)

Der Bootloader hat eine BootSize von 512 Words.

Woher weiß der GCC nun, wie groß die Section .bootloader ist?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Dirk schrieb:
> Woher weiß der GCC nun, wie groß die Section .bootloader ist?

Steht im "Part Description File".

von Stefan E. (sternst)


Lesenswert?

Dirk schrieb:
> Der Bootloader hat eine BootSize von 512 Words.
>
> Woher weiß der GCC nun, wie groß die Section .bootloader ist?

Das eine hat mit dem anderen nichts zu tun.
Die Prozentangabe geht immer vom kompletten Flash aus. Einen Bootloader 
musst du schon selber abziehen.
Und die Größe der Section .bootloader sagt aus, wie viel Code du da rein 
gepackt hast. Diese Größe ist aber praktisch immer Null, denn diese 
Section wird nämlich nicht für einen Bootloader verwendet.

von Krapao (Gast)


Lesenswert?

Da fällt mir nur ein Hack ein, bei dem du im Projekt/Quellcode angeben 
musst wie groß der Bootloader ist.

avr-size, das Tool zur Anzeige der statischen  Speicherauslastung, kann 
ja keine Fuses lesen und deswegen kann es auch nicht wissen wie groß du 
den Bootloader gemacht hast.

Bei dem Hack gehe ich davon aus, dass du einen Bootloader im AVR hast 
und dessen Größe kennst. Und du willst nur haben, dass die Anzeige des 
avr-size am Ende des Kompilierens dir anzeigt, wie voll der AVR jetzt 
ist.

Beim Hack kannst du in der Source einen Dummy-Bootloader anlegen, der in 
der Größe dem tatsächlichen Bootloaderbereich entspricht. Also im 
einfachen Fall ein Array passender Größe.

uint8_t dummy_bootloader[512] BOOTLOADER_SECTION;

Dann musst du dem Linker über Linkeroptionen in den Projekteinstellungen 
oder im Makefile sagen, wo die Section .bootloader anfängt:

# Beispielzeilen fürs Makefile ....
BOOTLOAD = 0x3800
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)

Damit sollte die Anzeige von avr-size angeben, wie voll das gesamte 
Flash inkl. Bootloader geworden ist.

Aber du musst noch verhindern, dass beim Flashen versucht wird den 
Dummy-Bootloader in den AVR zu brennen.

Die Bootloader Section kann man ja schützen. Aber eventuell führt ein 
Schreibzugriff zu einem Fehler und zu einem Abbruch des ISP-Programms.

Also mit avr-objcopy bei der Umwandlung der Elf-Datei in die Hex-Datei 
die Dummy-Bootloader Section entfernen, z.B. statt der Zeile

  $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

im Beispiel Makefile die Zeile

  $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .bootloader $< $@

verwenden.

von Krapao (Gast)


Lesenswert?

Danach die Frage "Ist das Ergebnis den Aufwand wert?"

IMHO lohnt es nicht. Es ist einfacher von Hand zu Fuß die Größe des 
Bootloaders von der Flashgröße abzuziehen (einmalig fürs Projekt) und 
dann die Prozentzahl neu zu berechnen (pro Compilerlauf) bzw. 
aufzumerken, wenn die angezeigte Größe über der berechneten Größe liegt.

von Dirk (Gast)


Lesenswert?

@Stefan:
"Die Prozentangabe geht immer vom kompletten Flash aus. Einen Bootloader
musst du schon selber abziehen."

... sowas habe ich mir schon gedacht.

@Krapao:

"Danach die Frage "Ist das Ergebnis den Aufwand wert?" "

...NEIN.

Ich hatte gehofft dass es eine einfachere Möglichkeit gibt. Z.B. im 
Makefile die Berechnung des Speichers zu "manipulieren".

Trotzdem erstmal vielen Dank für die schnelle Antwort.

von Sepp (Gast)


Lesenswert?

Hallo Forengemeinde!

Ich greife nochmal den Ursprungs-Thread auf:
Ich bekomme es nicht hin, die Codegrössen im AVR-Studio 4.19 (build 730) 
anzeigen zu lassen!
Kann mir da jemand weiterhelfen? Updaten möchte ich (noch) nicht.
Ins makefile kann ich leider nichts reinschreiben, da AVRStudio dieses 
sofort überschreibt.

Bin ratlos...

Gruß Sepp

von Maker (Gast)


Lesenswert?

Sepp schrieb:
> Ins makefile kann ich leider nichts reinschreiben, da AVRStudio dieses
> sofort überschreibt

Das Makefile kann im AVR/ATMEL Studio beliebig umbenannt werden.

von Sepp (Gast)


Lesenswert?

Ja, aber nur, wenn ich ein externes makefile einbinde.
Ich würde aber gerne mit den GUI-Settings arbeiten.
Mit Studio 4.18 hat's ja auch funktioniert!

Anscheinend hat das Problem sonst keiner :-)

von Robert (Gast)


Lesenswert?

Das Problem habe ich auch. (4.19 - 730)
4.19 hat aber auch schon den verbrauchten Speicher angezeigt.
Weiss noch nicht, was ich gemacht habe, daß es jetzt nicht mehr 
angezeigt wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.