ATMEGA2561 SRAM wird knapp

Gast #6658992
Hallo,
ich beschäftige mich gerade damit an einem ATMEGA2561 eine SD-Karte mit 
FatFS anzusprechen. Das Programm selbst belegt aktuell 21% Flash und 73% 
SRAM.

Wenn ich nun auf die SD-Karte ca 85 Zeichen Schreiben möchte, welche ich 
vorher mit MEMSET, STRCPY, STRCAT vorbereite, damit ein Datensatz drauß 
wird, dann funktioniert zwar das schreiben jedoch sind danach zum 
Beispiel Interrupts deaktiviert oder vorher festgelegte Variablen auf 
einmal genullt. Wenn ich das Schreiben auf die SD-karte weg lasse, dann 
läuft alles normal durch. Also scheint das ganze String kopieren zu groß 
zu werden?

Wer kann hier helfen?
Gast
Piere schrieb:
> Wer kann hier helfen?

Hast du schon versucht alle festen Strings ins PROGMEM zu
verlegen? Bringt oft eine ganze Menge freien RAM.

Vielleicht hast du auch noch zu viele einzelne String-
Zwischenspeicher die zu zusammenfassen könntest ....
Gast
beo bachta schrieb:
> Hast du schon versucht alle festen Strings ins PROGMEM zu
> verlegen? Bringt oft eine ganze Menge freien RAM.
>
> Vielleicht hast du auch noch zu viele einzelne String-
> Zwischenspeicher die zu zusammenfassen könntest ....

Nein. Also alle String mit PROGMEM festschreiben und dann über Pointer 
verwenden?
Gast
Piere schrieb:
> Also alle String mit PROGMEM festschreiben und dann über Pointer
> verwenden?

Pointer zeigen normalerweise ins RAM. Die Adressen des Programmspeichers 
überlappen sich mit dem RAM, deswegen musst du alle Zugriffe auf andere 
befehle umschreiben. Zum Beispiel musst du puts() in puts_P() ändern.

Da steht alles, was man dazu wissen muss: 
https://www.nongnu.org/avr-libc/user-manual/pgmspace.html
Dein aktuelles Problem ist mit Sicherheit ein Programmierfehler.

Du solltest aber wissen, dass Du bei Deinem AVR recht einfach externes 
SRAM anschließen kannst, das Du dann genauso wie internes ansteuern 
kannst. Du brauchst dafür die Ports A, C und G am AVR, einen 74HC573 und 
ein paralleles SRAM von 32KByte oder mehr. Wie es geht, steht in Kapitel 
9 des Datenblatts oder z.B. hier:

https://scienceprog.com/adding-external-memory-to-atmega128/

fchk
Gast
Bin jetzt dabei alles ins Flash zu legen was constant ist. Schade dass 
beim compilieren nicht darauf eingegangen wird, was im Ablauf noch 
benötigt wird.
Gast
Frank K. schrieb:
> Dein aktuelles Problem ist mit Sicherheit ein Programmierfehler.

Ich habe schon mit Chans FATFs gearbeitet, dabei fällt auf dass
dieses System eine recht grosse Tiefe (Verschachtelung) in den
Funktionsaufrufen aufweist. Zudem sind die Funktionsaufrufe oft
mit vielen Parametern ausgestattet sodass hier für beide
Eigenschaften auch eine hohe Wahrscheinlichkeit besteht dass
es mal zu einem "grossen" Stack kommt. Zumindest was die
AVR-Familie betrifft ....
Peter schrieb:
>> Kommt ganz auf die Konfiguration an. Siehe
>> http://elm-chan.org/fsw/ff/doc/appnote.html#memory
>
> Werde da nur nicht schlau wie viel SRAM nun gebraucht wird...

Das was dort dargestellt ist, ist der KONSTANTE RAM-Bedarf (globale bzw. 
lokal-statische Variablen). Den zeigt dir der Compiler an. Was dort 
NICHT steht, ist der DYNAMISCHE RAM-Bedarf auf dem Stack. Der hängt von 
den Funktionen und der Verschachtelungstiefe ab. Aber mehr als 500B 
sollte man nicht brauchen. Wirklich gemessen hab ich es aber auch nicht.

Die Wahrscheinlichkeit ist hoch, daß der Fehler in deinem Programm 
steckt und nicht durch geringen verfügbaren RAM verursacht wird.
Gast
Danke Falk, habe die Abschnitte, wo der String für die SD-Karte gebaut 
wird, geprüft aber finde nix was darauf hindeutet dass es zum Fehler 
kommt. Die Datei auf der SD sieht auch top aus.
Gast
Was mir generell auffällt, vielleicht kann es jemand auflösen, wenn ich 
ein puffer für einen String genau bestimme, String 10 Zeichen, Puffer 
hat Platz für 10 Zeichen, läuft immer was schief. Lasse ich etwas 
Reserve, passt es...
Gast
Peter schrieb:
> Und wenn ich mit STRCPY und STRCAT arbeite, kommt das an jeden String
> oder nur ganz zum Schluss?

Muss, sonst wäre das Ergebnis kein gültiger String. Ob diese Funktionen 
das Null-Byte selbst anhängen oder es dir überlassen, kannst du ihrer 
Doku entnehmen.

https://www.nongnu.org/avr-libc/user-manual/group__avr__string.html

Verlasse dich nicht darauf, dass sich da alle Funktionen gleich 
verhalten, tun sie nämlich nicht. Lieber nachlesen.
Piere schrieb:
> Hallo,
> ich beschäftige mich gerade damit an einem ATMEGA2561 eine SD-Karte mit
> FatFS anzusprechen. Das Programm selbst belegt aktuell 21% Flash und 73%
> SRAM.
> ....Wenn ich das Schreiben auf die SD-karte weg lasse, dann
> läuft alles normal durch. Also scheint das ganze String kopieren zu groß
> zu werden?
>
> Wer kann hier helfen?

nimm einen AVR mit mehr SRAM und weniger flash:
ATmega1284p 128K flash und 16K SRAM!
Gast
Joachim B. schrieb:

> nimm einen AVR mit mehr SRAM und weniger flash:
> ATmega1284p 128K flash und 16K SRAM!

Das ist leider nur dann ein Ausweg, wenn man mit max. 32 GPIOs auskommt.

Eine Alternative könnten vielleicht die AVR128Dx sein. Die haben 
ebenfalls 16k SRAM und 128k Flash, aber bis zu 54,5 GPIOs. Leider 
ziemlich andere Peripherie, da gibt es viel Neues zu lernen, wenn man 
von den "klassischen" AVR8 kommt. Hat man hingegen schon mit XMegas 
hantiert, ist der Schock nicht gar so groß.
Gast
Die MCU tauschen wäre der letzte Auswwg, ich versuche den Puffer zum 
Zwischenspeichern zu erweitern und wenn das nicht klappt alle String in 
den Flash legen um SRAM zu sparen
Gast
Joachim B. schrieb:

> na die Anwendung will ich sehen die unbedingt Ports an der MPU benötigt!
> Porterweiterung ist ja nun kein Neuland!

Nur langsam. Und eben gelegentlich langsamer als für die Anwendung gut 
ist. Es gibt nämlich Anwendungen, die auch noch was anderes tun, als ein 
GUI aus Tastern und LEDs und ein paar Relais anzusteuern...

> c-hater schrieb:
>> AVR128Dx
>
> 3,3V oder 5V?

Egal. die laufen von 1,8 bis 5,5V mit vollem Takt von 24MHz. Das ist 
anders als bei den klassischen AVR8 und auch anders als bei den XMega.
Gast
Peter schrieb:

> Wie wirkt sich eigentlich das \0 auf die SD-Karte aus? Wird es als Bit
> gezählt und ist im Editor am PC nicht sichtbar?

Kommt erstens drauf an an welcher Stelle das auftaucht und zweitens 
darauf, welchen Editor man verwendet...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 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.