mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR RAM-ROM-Flash-Variablen Zusammenspiel


Autor: 0undNichtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe mal eine Verständnisfrage, ich benutze einen Atmega64.
Der hat ja 64KB+4KB. Nun verstehe ich aber nicht ganz, wo diese Limits 
zu tragen kommen. 64KB klar so groß darf maximal das Assembly sein also 
die durch GCC erzeugte TEXT Sektion. Aber wie verhält sich das nun mit 
Variablen? Darf ich da nur eine bestimmte Anzahl an Variablen haben oder 
habe ich Einschränkungen bei malloc()? Mir ist irgendwie das 
Zusammenspiel von RAM(SRAM), ROM(Flash) und wo nun globale/lokale 
Variablen abgelegt werden unklar... Wäre nett, falls das einer erhellen 
könnte ;-)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Variablen können nur im RAM abgelegt werden, und das ist 4 kByte groß. 
Auch konstanten wie Stringkonstanten landen beim AVR im RAM, sofern man 
nicht explizit diese im FlashROM ablegt.

Dann aber sind zum Zugriff auf diese Konstanten spezielle 
Zugriffsfunktionen zu verwenden.

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

Das ist in der Harvard-Architektur des AVR begründet, bei dem Programm- 
und Datenspeicher voneinander getrennt sind.
Aus diesem Grund kann der AVR auch keine Programme aus dem RAM 
ausführen.

malloc() arbeitet mit dem Heap, und der liegt im RAM, das mit dem Stack 
(der unter anderem für automatische Variablen benötigt wird) geteilt 
wird.

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Variablen kann es nur im RAM geben. Wenn man sie nicht ändern könnte 
wären es keine Variablen, oder?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Variablen kann es nur im RAM geben. Wenn man sie nicht ändern könnte
>wären es keine Variablen, oder?

Nö.
Man kann Variablen auch (problemlos) ins EEPROM legen.
Sie können dann auch geändert werden, wenn auch nicht so schnell (und 
oft) wie Variablen im RAM.

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hrm. Man könnte sie auch auf Papier schreiben. Der uC gibt den Wert als 
Blinkcode auf eine LED aus. Wenn eine Instruktion kommt die eine 
Variable einliest, dann muss man den Wert über einen Taster eingeben.

Vielleicht sollten wir "modifiable lvalue" statt "Variable" sagen.

Autor: 0undNichtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HaHa ;-)

Also gibt es eine Beschränkung bei der maximalen Anzahl der Variablen, 
Unterprogrammaufrufe,...? Mist ich wollte mit malloc() Messwerte 
speichern, all zu viel passt dann da ja nicht mehr rein :-(

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also gibt es eine Beschränkung bei der maximalen Anzahl der Variablen,
>Unterprogrammaufrufe,...?

Hast Du ernsthaft geglaubt, es gäbe keine Beschränkung??

>Mist ich wollte mit malloc() Messwerte
>speichern, all zu viel passt dann da ja nicht mehr rein :-(

Nein, aber es verbietet Dir niemand, externen Speicher zu verwenden.

Autor: 0undNichtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja natürlich gibt es immer eine Grenze. Aber ich habe Systemarchitektur 
nur an einem 8085 gelernt und da war halt nur ein linearer Speicher mit 
dem Programm und oben hat man seinen Stackpointer hingelegt.

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.