Unten sind die Make-Ausgaben (WinAVR, GCC) für den Server von Ulrich Radig. Wieviel SRAM ist noch frei? Size before: Hexfiles/Webserver_MEGA644.elf : section size addr .data 620 8388864 .text 51320 0 .bss 2981 8389484 .debug_aranges 800 0 .debug_pubnames 9068 0 .debug_info 52247 0 .debug_abbrev 12550 0 .debug_line 30693 0 .debug_frame 3792 0 .debug_str 8406 0 .debug_loc 23968 0 .debug_ranges 1016 0 Total 197461 Size after: Hexfiles/Webserver_MEGA644.elf : section size addr .data 620 8388864 .text 51368 0 .bss 2981 8389484 .debug_aranges 800 0 .debug_pubnames 9068 0 .debug_info 52317 0 .debug_abbrev 12550 0 .debug_line 30765 0 .debug_frame 3792 0 .debug_str 8412 0 .debug_loc 23968 0 .debug_ranges 1016 0 Total 197657
Ups schrieb: > Wieviel SRAM ist noch frei? keine Ahnnung, kann man dort nicht ablesen. Soetwas weiss der compiler auch nicht.
Flash = .text SRAM (statisch) = .data + .bss Den dynamischen RAM-Verbrauch deiner Funktion muss man während der Laufzeit messen, entweder mit passenden Tools oder mit dem Simulator. Darüber gibt es diverse Threads im Forum. http://www.mikrocontroller.net/search?query=%2BRAMverbrauch+%2Bavr&forums[]=1&forums[]=19&forums[]=9&forums[]=10&forums[]=2&forums[]=4&forums[]=3&forums[]=6&forums[]=31&forums[]=17&forums[]=11&forums[]=8&forums[]=14&forums[]=12&forums[]=7&forums[]=5&forums[]=15&forums[]=13&forums[]=18&forums[]=16&max_age=-&sort_by_date=0
Du kannst den unbenutzten RAM mit einem charakteristischen Muster beschreiben ("painten") und gucken welcher Bereich vom Stack und den Daten überstrichen wird: https://www.youtube.com/watch?v=cDaG1CdP5Ew Beste Grüße, Marek
Vielen Dank für eure Antworten und die Links. D. h. von den 4 KBytes des ATMega644 sind 2981 Bytes (.bss) plus 620 Bytes (.data) gleich 3601 Bytes vergeben und der Rest ist für den Stack (malloc() und free() werden nicht verwendet) reserviert.
Was muss man ins Makefile schreiben, um etwa nach dem Kompilieren angezeigt zu bekommen: Flash used: xx%
Pups schrieb: > Was muss man ins Makefile schreiben, um etwa nach dem Kompilieren > angezeigt zu bekommen: > > Flash used: xx% Beispiel Makefile und achte auf das "SIZE", also avr-size
Timmo H. schrieb: >> Flash used: xx% > > Beispiel Makefile und achte auf das "SIZE", also avr-size Eine Berechnung, wieviel % Speicherplatz verwendet wird gibt das Beispiel nicht her.
Maxi schrieb: > Eine Berechnung, wieviel % Speicherplatz verwendet wird gibt das > Beispiel nicht her. Mit etwas Eigeninitiative hättest du das schnell herausgefunden, 3 Sekunden Google: avr-size -C --mcu=atmega644 blubb.elf Aber scheinbar ist das hier inzwischen zu viel verlangt.
Schon klar, aber die gewünschte Ausgabe wäre z.B. 34% used 66% free. Wie macht man das? PS: Danke für die flinke Antwort :-)
Ach komm... 100-X% kann man doch im Kopf rechnen.... Device: atmega644 Program: 7842 bytes (12.0% Full) (.text + .data + .bootloader) Data: 198 bytes (4.8% Full) (.data + .bss + .noinit) Dann musst du es halt selbst parsen.
Timmo H. schrieb: > Ach komm... 100-X% kann man doch im Kopf rechnen.... Schon, aber wozu selber rechnen, wenn man vor einem Rechner hockt? Kann das ein Makefile nicht?
In meinem Embedded Webserver mache ich das so: Ich versuche mit malloc() 4KB RAM zu reservieren, was logischerweise immer fehlschlägt. Dann versuche ich 16 bytes weniger, dann wieder 16 Bytes weniger, usw. So oft, bis malloc nicht mehr null zurück liefert. Dann weiß ich ungefähr, wie groß der größte verfügbare Speicherblock ist. Das ist allerdings nur die halbe Wahrheit, denn es könnte auch sein, dass darüber hinaus noch kleinere Speicherblöcke verfügbar sind. Für meine Zwecke genügt allerdings diese vereinfachte Abfrage. Umgekehrt: Wenn ich wirklich wissen will, wieviel Speicher insgesamt frei ist, also ggf. auch in mehreren Stücken verteilt, fordere ich mit malloc() wiederholt 16 Bytes an, bis er einen null zurück liefert. Blöcke die kleiner als 16 bytes sind fehlen dann natürlich. Man sollte die Blockgröße daher passend zum Anwendungsfall wählen. Der Haken dabei ist jedoch, dass ich den Speicher wieder freigeben muss. Man könnte sich die Adresse des ersten Blocks merken und die Adressen der nächsten Blöcke immer in den zuvor reservierten Block schreiben (verkettete Liste). Für einen kleinen Test mag es jedoch genügen, nach dem Test einfach einen Reset zu machen. Fazit: Überlege Dir, was Du genau mit "freier Speicher" meinst. Es könnte der größte verfügbare Block gemeint sein, oder die Summe aller verfügbaren Blöcke, oder die Summe aller Verfügbaren Blöcke mit einer bestimmten Größe.
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.