AVRStudio: Anzeige verbrauchter Speicher

Gast #2411168
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.
#2411221
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
Gast #2528556
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?
#2528684
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.
Gast #2528700
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.
Gast #2528708
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.
Gast #2532936
@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.
Gast #3112219
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
Gast #3112540
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 :-)
Gast #3137848
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.