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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren