- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Speicherplatzbelegung in einem Atmega32

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935

    Speicherplatzbelegung in einem Atmega32

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo liebe Bastler,
    mir ist irgendwie nicht ganz klar, wieviel Flash- und SRAM-Speicher mein Programm belegt. Ich programmiere mit PN2, kompiliere mit WinAVR und schreibe die HEX Datei mit PonyProg (kein Bootloader).
    Beispiel:
    Die HEX Datei ist 16.275 Bytes gross (rechtsklick Eigenschaften in Windows). Beim kompilieren schreibt mir WinAVR:
    Size after:
    bla.elf :
    section size addr
    .text 5668 0
    .data 110 8388704
    .bss 145 8388814
    .debug_aranges 128 0
    .debug_pubnames 596 0
    .debug_info 4467 0
    .debug_abbrev 1434 0
    .debug_line 2802 0
    .debug_frame 352 0
    .debug_str 1174 0
    .debug_loc 1065 0
    Total 17941
    Nun bin ich zum einen erstaunt, denn das Programm ist noch gar nicht so riesengross; Wenn PonyProg schreibt, scheint es auch nur 15-20% des Gesamtspeichers zu belegen.

    Zum anderen ist vor Allem die SRAM Belegung interessant, denn es wird eine Art Datenlogger, und je mehr Daten ich loggen kann, desto schön. Das Problem ist, weder PonyProg noch WinAVR scheint mir mitzuteilen, wenn ich zuviel FLASH oder SRAM belege. Mir ist es schon passiert, dass ich mit "zuviel" einen Atmega unbrauchbar gemacht habe, zumindest schien das so zu sein. Auch hatte ich schon merkwürdiges Programmverhalten, wenn zuviel FLASH belegt war. Pony meldet zwar "Write sucessful" aber das Programm funktioniert nicht mehr richtig; wenn man dann ein paar Bytes kürzer codet, geht es wieder problemlos.

    Lange Story kurzer Sinn:
    Könnte mir jemand der da durchsteigt mal erklären, wie ich die Speicherbelegung bzw freies FLASH- und SRAM irgendwie ermitteln kann, idealerweise aufs Byte genau, und ohne alle meine Variablen in Handarbeit zusammenzurechnen?

    Herzlichen Dank schon im vorraus,
    Eure Katze

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    35
    Beiträge
    841
    Blog-Einträge
    1
    Hm ich vermute, deine große Hexdatei besteht zu einem großen Teil aus FF, das wird aber als "freier" Speicher gerechnet. Für den AVR ist FF natürlich freier Speicher*vermute ich*

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Katzerl: Das HEX Format ist der Code in HEX-ASCII mit allem möglichen Zeugs dazu. (Mach mal mit Notepad auf). Das zählt nicht.
    Ich glaub, die BIN file zeigt was realistisches.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Danke für eure Antworten. Also das HEX-File selbst gibt schon mal wenig Auskunft, das sehe ich nun ein.
    Wenn ich 20 Byte mehr reserviere, vergrössert sich der Wert in der Zeile
    .bss 145 8388814
    ebenfalls um 20 Byte. Das scheint also was mit der SRAM Belegung zu tun zu haben.

    Die Zeile
    .data 110 8388704
    da weiss ich nicht so recht, was das ist.

    Und ".text" - ist das bytegenau die Größe meiner FLASH Belegung?

    Sorry wenn ich mich dumm anstelle, aber ich möchte das endlich mal wissen.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    DIe Sache ist so (soweit ich weiss):

    Size after:
    bla.elf :
    section size addr
    .text 5668 0 -------------------------- Flash (programm) 5668 Bytes
    .data 110 8388704-------------------- SRAM Variable 110 Bytes von dir irgendwo definiert
    .bss 145 8388814--------------------- SRAM Variable 145 Bytes , die vom compiler initialisiert werden

    Also 255 Bytes SRAM, 5668 Bytes FLASH
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von PicNick Beitrag anzeigen
    DIe Sache ist so (soweit ich weiss):
    Fast.

    Flash = .text + .data
    SRAM = .data + .bss + in der Auflistung nicht angezeigten dynamischen Verbrauch
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Vielen Dank, das hilft mir schon um einiges weiter
    Mit dynamischem Verbrauch ist Speicher gemeint, den ich mit alloc oder ähnlichem dynamisch reserviere und freigebe?

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Jupp, aber auch der Stack knabbert am SRAM
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Ähnliche Themen

  1. Conway's Game of Life auf einem ATmega32
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 17
    Letzter Beitrag: 18.11.2011, 10:38
  2. Atmega8 als Portexpander an einem Atmega32
    Von RobNet im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 14.11.2011, 09:26
  3. Temperatur und DCF77 an einem ATMEGA32 ?
    Von infosystems im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 14.04.2011, 23:04
  4. Ersatz des atmega8 mit einem atmega32
    Von inka im Forum Asuro
    Antworten: 102
    Letzter Beitrag: 24.01.2008, 15:00
  5. Erste Schritte: Probleme mit einem ATmega32
    Von Bääääär im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 09.07.2007, 17:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress