Hallo zusammen,
ich habe ein EEPROM über i2c/twi an meinen xmega angeschlossen.
Nun frage ich mich ob es möglich ist einen virtuellen linearen
Speicherbereich dafür bereit zu stellen, so das mit Hilfe von GCC
Bereiche reservieren kann und einfach Pointer benutzen kann.
Halt so ähnlich wie fürs richtige EEPROM
@ Felix H. (masterq)
>ich habe ein EEPROM über i2c/twi an meinen xmega angeschlossen.>Nun frage ich mich ob es möglich ist einen virtuellen linearen>Speicherbereich dafür bereit zu stellen, so das mit Hilfe von GCC>Bereiche reservieren kann und einfach Pointer benutzen kann.
Nein, das geht nicht. Du musst Routinen zum Lesen und Schreiben nutzen.
MFG
Falk
Klar klar, die habe ich ja auch, und die will ich auch benutzen.
Ich sehe gerade ich habe einen Fehler gemacht, es ist klar das ich die
Variable nicht mit einem Wert initialisieren kann, da der Programmer
nicht auf das externe EEPROM zugreifen kann. Und es ist ebenfalls klar
das ich die read und write routinen benötige um ein Wert ins EEP zu
schreiben oder einen Wert zu lesen.
Es geht mir um die Reservierung des Speichers. Normaler weiße müsste ich
das ja selber managen.
Deshalb möchte das der Compiler sich merkt welche Bereiche schon
reserviert sind.
Also das geht auf jeden Fall, ich hoffe nur das es nicht so aufwendig
ist :-)
also zb.:
1
intblaEXT_EEMEM;
2
intbla2EXT_EEMEM;
So möchte ich das &bla = 0, und &bla2 = 4, also aus Compiler Sicht ein
virtueller speicher der reserviert wird. reserviert wird unabhängig von
RAM. Wobei die Addressen der Variablen natürlich weiterhin im RAM
liegen.
wenn ich jetzt die Variablen beschreiben möchte reicht mir:
@ Felix H. (masterq)
>Klar klar, die habe ich ja auch, und die will ich auch benutzen.
Was soll dann die Diskussion?
>Es geht mir um die Reservierung des Speichers. Normaler weiße müsste ich>das ja selber managen.
Deoin Compoler weiß reich GAR NICHTS von einem externen EEPROM. Das weiß
KEIN Compiler. Darum geht der Zugriff NUR über Funktionen.
>Deshalb möchte das der Compiler sich merkt welche Bereiche schon>reserviert sind.>Also das geht auf jeden Fall, ich hoffe nur das es nicht so aufwendig>ist :-)
Im RAM! Oder im INTERNEN EEPROM, der Zugriff ist ggf. im Compiler mit
eingebaut. Im AVR-GCC ist selbst das nur halb, er kann sie zwar im
EEPROM anlegen, der Zugriff geht aber nur über Funktionen, nicht
"normal" wie C-Variablen.
>So möchte ich das &bla = 0, und &bla2 = 4, also aus Compiler Sicht ein>virtueller speicher der reserviert wird. reserviert wird unabhängig von>RAM.
Geht nicht, siehe oben. Es sein denn du bist so fit, das in den AVR GCC
einzubinden. Viel Spass.
MFG
Falk
Hi Felix,
ich glaube das was du suchst ist eine eigene Section.
Schau dir die Implementierung von EEPROM mal genauer an, dann solltest
du schnell fündig werden.
Stephan
Danke Stephan,
auch für das richtige Wort :-)
Schaue gleich rein,
kannst du den Aufwand abschätzen?
Kann mir eigentlich nicht vorstellen das es soo schlimm ist, ist ja
alles schon für andere Sectionen implementiert.
Grüße
Felix
Hi Felix
also so ein großer Aufwand ist das nicht.
Ich hatte dies für ein Projekt bei meiner letzten Firma so gemacht,
leider aber keine Unterlagen mehr davon hier.
Das erstellen und die Flags bekommst du aus dem Umgang mit EEPROM.
Die Lese und Schreibe-Funktionen hast du schon, das was etwas Zeit
kostet ist, wie man den Speicher (Section) dann mit Init-Werten füllt!?!
Ich hatte es damals mit dem Bootloader den wir genutzt hatten,
realisiert.
Wenn du alles fertig hast, könntest du uns die Sachen dann hier zur
Verfügung stellen? Dann braucht man das Rad nicht jedes mal neu
erfinden. :-)
Stephan
Felix H. schrieb:> Kann mir eigentlich nicht vorstellen das es soo schlimm ist, ist ja> alles schon für andere Sectionen implementiert.
Selbst wenn nicht, irgendwas geht immer: notfalls würde ich einen
Prozessor definieren mit einem real nicht existierenden RAM-Bereich. Du
musst dann nur selbst aufpassen, dass du keine direkten
Lese/Schreibbefehle benutzen darfst.
Gruss Reinhard
Klar wenn ich es schaffe stelle ich es sofort zu Verfügung, gestern
musste ich aber leider erst mal feststellen, das ich noch ein bisschen
was zu lernen habe :-(
Die xmega i2c/twi routinen für ein externes eeprom habe ich auch
nirgendwo gefunden, und musste sie selber implementieren, wenn ich sie
perfektioniert habe kann ich diese auch zu Verfügung stellen.
@Reinhard
Was du da sagst klingt gar nicht so dumm, wie gehe ich so etwas an?
Vielen dank für die konstruktive Hilfe
Felix
Felix H. schrieb:> Was du da sagst klingt gar nicht so dumm, wie gehe ich so etwas an?
Hallo,
ich bin da aktuell nicht in Übung, aber mal so ins Blaue und
Intel-ähnlich formuliert:
Ich lege ein RAM-Segment (oder section...) an, das mit keinem anderen
kollidiert und das an der Adresse EEProm_Basis beginnt. Entweder einfach
so oder die Prozessorspezifikation ändern.
Darin lege ich meine Variablen an, z.B. mit DEFB, DEFW oder auch in C.
eine Variable X hat also die Adresse EEProm_Basis + Offset(X).
Zugriffe erfolgen über EEProm-Routinen, die für X die (EEProm-)Adresse
bilden aus Adresse(X) - EEProm_Basis. Das ist schon alles.
Gruss Reinhard