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
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.
Leider nein, ich bekomme nur diese Ausgabe ------ Rebuild All started: Project: MP3, Configuration: default AVR ------ ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
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
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.
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
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?
Dirk schrieb: > Woher weiß der GCC nun, wie groß die Section .bootloader ist? Steht im "Part Description File".
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.
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.
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.
@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.
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
Sepp schrieb: > Ins makefile kann ich leider nichts reinschreiben, da AVRStudio dieses > sofort überschreibt Das Makefile kann im AVR/ATMEL Studio beliebig umbenannt werden.
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.