mikrocontroller.net

Forum: Compiler & IDEs was muss ich in "C" beachten, wenn ich ext. Speicher verwenden will?


Autor: Santiago m. H. (mausschubser)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Santiago m. H. (mausschubser)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Santiago m. H. wrote:

> Die Variablen __heap_start und __heap_end sind wahrscheinlich für
> malloc?

Ja.

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Santiago m.H.

Hallo, schau dir mal ein Projekt von mir an, ich hatte bei diesen 
Projekt mit den ATmega2561 zu tun + externes RAM.

http://213.239.212.163/mediawiki/index.php/Microwe...

Im makefile musst du dann im prinzip nur wie schon erwähnt __heap_start 
und __heap_end einstellen.

CA Dirk

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.