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
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
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
Santiago m. H. wrote: > Die Variablen __heap_start und __heap_end sind wahrscheinlich für > malloc? Ja.
@ 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/Microwebserver#Grundgedanken_zum_Aufbau_der_Software Im makefile musst du dann im prinzip nur wie schon erwähnt __heap_start und __heap_end einstellen. CA Dirk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.