was muss ich in "C" beachten, wenn ich ext. Speicher verwenden will?

OP #1003040
Lesenswert?
• ▲
▼
Hallo,

möchte mich demnächst an einen mega2560er waagen und der hätte ein 
Zwichengesicht für fremden Speicher.

Wie sieht das denn als C-Anwender aus?

Muss ich Adressen selbst auf den/die Port(s) schreiben, die Flags 
toggeln und dann Daten lesen/bzw. schreiben, oder nimmt mir der 
C-Compiler da was an Arbeit ab?

Laut Datenblatt wird der externe Speicher ja schon vom µC gemappt ...

So ganz ist mir das Prinzip (des ext. Speicherinterfaces und dessen 
Handhabung) noch nicht ganz klar.

Den Speicherbaustein selbst ansteuern und byteweise Daten lesen, bzw. 
schreiben würde ich, denke ich mal, hinbekommen.

Gruß Santi
Moderator Persönliche Seite #1003092
Lesenswert?
• ▲
▼
Santiago m. H. wrote:

> Muss ich Adressen selbst auf den/die Port(s) schreiben, die Flags
> toggeln und dann Daten lesen/bzw. schreiben,

Das kannst du natürlich tun -- wenn du willst.

> oder nimmt mir der
> C-Compiler da was an Arbeit ab?

Nicht der Compiler, sondern der AVR: wenn du das XMEM-Interface
eingeschaltet hast, gehen Zugriffe auf Speicheradressen jenseits
des internen RAM (Register, IO-Register, SRAM) automatisch auf
dieses Interface.

In welchem Maße du dich bei diesen Zugriffen der Unterstützung des
Compilers bedienst oder nicht, ist und bleibt rein deine Sache.
Normalerweise weiß der Compiler nichts von seinem Glück, mehr RAM
zugreifen zu können, und benutzt ausschließlich den internen SRAM.
Dennoch kannst du selbst in diesem Modus über Zeiger gezielt auf
den XRAM zugreifen.  Du kannst aber auch dem Compiler auftragen,
für bestimmte Teile des Speicherbedarfs (Variablen, Heap, ggf. auch
Stack, aber das ist nicht empfohlen bzw. hatte bei einigen AVRs
auch Bugs) selbst auf den XRAM zuzugreifen.

http://www.nongnu.org/avr-libc/user-manual/malloc.html
OP #1003168
Lesenswert?
• ▲
▼
Hallo Jörg,

danke für Deine Aufmerksamkeit!

Danke auch für den Link. Den Abschnitt habe ich immer übersprungen, weil 
ich dachte, dass malloc im µC nix verloren hat.
Aber wenn man das mal in Ruhe durchliest, macht das mehr als Sinn ;)

Wieder was dazu gelernt.

Macht natürlich mehr Sinn, einen Speicherbereich allozieren zu lassen, 
anstatt dem Zeiger einfach eine Adresse zuzuweisen.

Das letzte Speichermodell hat es mir angetan. Werde es wahrscheinlich so 
umsetzen.

Wie sieht es denn mit dem Zeitverhalten aus?
Wenn ich das Timing-Diagramm im Datenblatt richtig deute, dauert ein 
Zugriff auf den externen Speicher 3 Takte. Wahrscheinlich kommt dann 
noch die übliche Zeigerarithmetik für den Compiler obendrauf. Oder?

Die Variablen __heap_start und __heap_end sind wahrscheinlich für 
malloc?
Oder beachtet die noch jemand anderes?

Gruß Santi

Antwort schreiben

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.

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.