- Labornetzteil AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Problem mit ATMEGA32. Variablen spielen verrückt.....

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795

    Problem mit ATMEGA32. Variablen spielen verrückt.....

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    Ab einer Bestimmten Menge an Programm spielen die Variablen verrückt!!!


    Liegt das an einer Überschreitung der Größen?

    Size after:
    main.elf :
    section size addr
    .text 8960 0
    .data 1932 8388704
    .bss 143 8390636
    .noinit 0 8390779
    .eeprom 0 8454144
    .stab 10140 0
    .stabstr 3996 0
    Total 25171


    Ich weiß nicht mehr aus!
    Gruß,
    Franz

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Flash: Nee, ist doch noch genug Platz.

    RAM: Ja, Dein Stack wird Dir Variablen überschreiben:

    .data + .bss = 2075 Byte was mehr ist als die 2048 bytes RAM des Mega32.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.11.2004
    Ort
    München
    Alter
    36
    Beiträge
    447
    Hi Kaiser-F,
    Gibt diesem Thema doch bitte einen gescheiten Namen!
    Jeder braucht dringend hilfe, sondst würde man ja nicht fragen.

    MfG Alex

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795
    Zitat Zitat von ogni42
    Flash: Nee, ist doch noch genug Platz.

    RAM: Ja, Dein Stack wird Dir Variablen überschreiben:

    .data + .bss = 2075 Byte was mehr ist als die 2048 bytes RAM des Mega32.
    Hm, das würde also begründen, warum die Variablen verrückt spielen?



    Zitat Zitat von PasstScho
    Gibt diesem Thema doch bitte einen gescheiten Namen!
    Jeder braucht dringend hilfe, sondst würde man ja nicht fragen.

    MfG Alex
    Sorry, hab schon geändert. Stört mich selber auch immer.
    War so verwirrt, da ist mir nichts anderes eingefallen....
    Gruß,
    Franz

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2006
    Beiträge
    14
    Wenn der Stack Variablen überschreibt, dann kommt es zu genau diesen absolut unvorhersehbaren Ergebnissen. Daran bin ich auch schonmal fast verzweifelt.

    Weiterhin würde ich bei so starker Auslastung des SRAM auf die Addition von .data und .bss nichts mehr geben. Je nach dem wie tief die Funktionen verschachtelt sind, kommt es schon deutlich vorher zu Problemen.

    Schau Dir unbedingt den Artikel Speicherverbrauch bestimmen mit avr-gcc hier im RN an. Bei mir waren die Werte des Compilers bei rund 90% SRAM und durch die verschachtelten Funktionsaufrufe hat mir der Stack regelmäßig globale Variablen zerschossen.

    Servus
    Technikus

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795
    Interessanter Artikel... Vielen Dank!

    Nur wie behebe ich mein Problem...?
    Soo viele Variablen im SRAM habe ich ja garnicht...

    10 oder 20. Jeweils 8 oder 16 Bit, halbe/halbe.

    Und eine Schriftart, die als Array gespeichert ist. Die ist aber nich im SRAM. Hoffe ich.

    Habt ihr Informationen, wie man die Speicherart festlegt. In meinem Buch ist das zu allgemein auf PC-Systeme bezogen. Jetzt weiß ich nicht genau, wie das bei AVR-GCC gilt....

    Vielen Dank für eure Bemühungen
    Gruß,
    Franz

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Und eine Schriftart, die als Array gespeichert ist. Die ist aber nich im SRAM. Hoffe ich.
    meinst Du vielleicht avr/pgmspace.h u. avr/eeprom.h ?

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    37
    Beiträge
    795
    Ähm.... Sorry, kann dir gerade nicht folgen, welcher Bahnhof?
    Gruß,
    Franz

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    ähm, sorry, es sollte so sein:

    Die ist aber nich im SRAM. Hoffe ich.

    Habt ihr Informationen, wie man die Speicherart festlegt.
    meinst Du vielleicht avr/pgmspace.h u. avr/eeprom.h ?

    so, ich hoffe, jetzt ist es verständlicher ...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2006
    Beiträge
    14
    Und eine Schriftart, die als Array gespeichert ist. Die ist aber nich im SRAM. Hoffe ich.
    Wenn Du einfach ein Array definiert hast, z.B.

    char array[256] = {1, 2, 3, ....};

    dann liegt das sowohl im Flash als auch im SRAM! Das ist sinnvoll, wenn Du dieses Array zur Laufzeit ändern willst. Wenn Du aber nur die Werte ausliest und nicht änderst, ist das eine grandiose Verschwendung von SRAM.

    Du kannst den Compiler anweisen, ein Array (wie jede andere Variable) nicht ins SRAM zu kopieren, sondern nur im Flash (oder im EEPROM) abzulegen.
    Variablen im Flash werden so definiert:

    char array[5] PROGMEM = {1, 2, 3, 4, 5};

    Damit das funktioniert, brauchst Du

    #include <avr/pgmspace.h>

    Allerdings kannst Du auf Variablen im Flash nicht transparent zugreifen. Du mußt sie vor Gebrauch in das SRAM umkopieren. Trotzdem spart man viel SRAM, denn Du must von einem großen Array meist nur ein einzelnes Element im SRAM haben und nicht das ganze Array, z.B. 100 Elemente. Der Zugriff auf Variablen im Flash erfolgt mit den Funktionen pgm_read_byte, pgm_read_word, memcpy_P und viele andere. Für weitere Infos lies mal das
    Tutorial von mikrocontroller.net, da stehen nähere Infos dazu drin. Ansonsten schau Dir mal das "avr libc user manual" bezüglich avr/pgmspace.h an, das findest Du (wenn Du WinAVR installiert hast) im Startmenü unter WinAVR.

    Servus
    Technikus

    Edit: Link repariert

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen