mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR - String-Konstanten in flash oder SRAM


Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAllo!

ich bin noch Neuling auf dem Gebiet der AVRs.
Ich habe gerade mein LCD zum laufen gebracht und dabei stellt sich mir 
die Frage ob mein verwendeter compiler (winAVR), automatisch meine 
STring-Konstanten in den SRAM legt, bzw von dort holt.
z.B.
lcd_string("test");

Was für Vorteile bzw. Nachteile bringt es, seine Konstanten in den Flash 
zu legen bzw. sie von dort zur Lauzeit zu lesen?

mfg
olli

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>automatisch meine STring-Konstanten in den SRAM legt, bzw von dort holt.

Du weisst aber, was mit dem RAM passiert, wenn man den Strom abschaltet?

MfG Spess

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jap, der Inhalt geht verloren!!

meinte damit auch nur, dass der AVR bei jedem STart die Konstanten aus 
dem flash in den Sram holt,..wenn das so stimmt :)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich bin kein C-Programmierer. Aber der RAM wird normalerweise für 
Wichtigeres benötigt: Stack, Variablen... . Abgesehen davon bringt es 
keinen wesentlichen Geschwindigkeitsvorteil.

MfG Spess

Autor: Thomas S. (thomass)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Olli,

ich habe selbst vor einiger Zeit ein Projekt mit Display programmiert.
Da ich auch Anfänger bin habe ich alle STRINGS auch in den SRAM 
gespeichert wie es bei Dir auch ist.
Durch mein Display 4x40 kam da einiges an Strings zusammen durch die 
Menuführung und bald war im RAM nicht mehr genügend Platz.
Ich würde Dir empfehlen alle Strings im Flash zu lassen und nichts in 
den RAM zu schreiben.
Schau mal hier

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Dann kannst Du Dir deine Strings aus dem Flash holen ohne unnötig RAM zu 
verbraten.

Thomas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RAM ist ein kostbares Gut und (zumindest bei mir) immer knapp.
Fest stehende Texte gehören in den Flash.
Es wird höchste Zeit für einen AVR mit 64 kB RAM on chip! :-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>RAM ist ein kostbares Gut und (zumindest bei mir) immer knapp.

C oder ASM?

MfG Spess

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und dabei stellt sich mir
>die Frage ob mein verwendeter compiler (winAVR), automatisch meine
>STring-Konstanten in den SRAM legt, bzw von dort holt.

Ein Blick oben links ins Tutorial hätte dir die Frage beantwortet. Nein, 
macht er nicht. Automatisch landen auch konstante Variablen im SRAM, und 
werden dort beim Programmstart mit ihren Werten initialisiert. Insofern 
stehen die Werte dafür natürlich auch im FLASH, da kommst du aber nicht 
dran.

Konstanten, die im FLASH liegen und vom Programm aus gelesen werden 
sollen, mußt du explizit per PROGMEM ins Flash legen, und auch mit den 
entsprechenden Funktionen da wieder rauslesen.

Oliver

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Olli wrote:
> HAllo!
>
> ich bin noch Neuling auf dem Gebiet der AVRs.
> Ich habe gerade mein LCD zum laufen gebracht und dabei stellt sich mir
> die Frage ob mein verwendeter compiler (winAVR), automatisch meine
> STring-Konstanten in den SRAM legt, bzw von dort holt.
Dein Compiler ist nicht WinAVR, sondern GCC.

> z.B.
> lcd_string("test");
Diese wird im RAM gehalten. Ins FLASH kriegt man Strings mit dem 
'PROGMEM'-Attribut. Mehr dazu in der Anleitung zur AVR-LIBC.

> Was für Vorteile bzw. Nachteile bringt es, seine Konstanten in den Flash
> zu legen bzw. sie von dort zur Lauzeit zu lesen?
Eine Konstante im 'RAM' braucht doppelt so viel Speicher: Zuerst wird 
sie ins FLASH genagelt, um dann beim Starten des Programms (des AVRs) 
von dort ins RAM kopiert zu werden.
Geschwindigkeitsvorteil bringts eigentlich keinen, RAM lesen ist etwa 
genauso teuer wie FLAHS lesen.
Konstanten im FLASH sind prinzipbedingt konstant, lassen sich also 
überhaupt nicht ändern. 'Normale' Konstanten im RAM sind eigentlich auch 
konstant, aber man kann sie trotzdem ändern (was aber nicht Sinn der 
Sache ist, klar).

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Spess
ASM

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar!!
danke für eure Antworten!
Werde also in Zukunt meine Konstanten per Progmem aus dem Flash lesen!
DAnke

Olli

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.