Funktionen für ext EEPROM wie für internen EEPROM

Gast #1644788
Lesenswert?
• ▲
▼
Hallo an alle,

ich beschreibe derzeit den internen EEPROM eines ATMEGA 16 mit der 
avrlibc. Nun möchte ich auf einen extrenen 24C02 umsteigen. Dieser 
Funktioniert auch schon über den I2C.

Ich suche nun nach Funktionen oder Lib's für meinen externen EEPROM die 
gleiche Funktionsweisen wie aus der avrlibc bereitstellen.

Also allá 
eeprom_write_block(myByteBuffer,eeFooByteArray1,sizeof(myByteBuffer));

Also so, dass ich nicht die direkte adresse in HEX im EEPROM angeben 
muss sondern, dass ich über variablen arbeiten kann.
Und die Funktionen mir die eigentliche Speicherorganisation abnehmen. 
Eben wie in der avrlic.

Ich hoffe ich habe mein Anliegen deutlich genug beschrieben. Bin noch 
nicht so der pro.

Vielen dank schonmal
Gast #1649231
Lesenswert?
• ▲
▼
Hey!!!!!!!!!

Hat den keiner n par Programmschnippsel für sowas parat ? Oder auch ne 
Idee oder n Ansatz wie sowas Funktioniert...

Vielleicht ist es ja auch ganz easy, nur ich komm enicht drauf..

Ihr würdet mir echt weiter helfen...

Danke
#1649240
Lesenswert?
• ▲
▼
> Und die Funktionen mir die eigentliche Speicherorganisation abnehmen.

Na ja.
Die Funktionen an sich sind es ja nicht, die dir die 
Speicherorganisation abnehmen.

Das macht schon der Compiler.
Das EEMEM Makro bei den Variablen sorgt dafür, dass diese Variablen in 
einer eigenen Section gesammelt werden. Dort kümmert sich dann 
Compiler/Linker um die korrekte Adresslage.

Aber um die Spezialfunktionen zum Auslesen an einer bestimmten 
Speicherstelle kommst du nicht herum. Die musst du sowieso neu 
schreiben.

Abgesehen davon lautet mein Rat: Sieh dir an, wie das EEMEM funktioniert 
und dupliziere das mit einer neuen Speicher-Section. Du musst 
rauskriegen, wie du die Speichersektion dem Compiler unterjubelst und du 
musst rauskriegen, wie du die Startadresse einer Section dem Linker 
unterjubelst.
#1649422
Lesenswert?
• ▲
▼
rollo schrieb:
> Also allá
> eeprom_write_block(myByteBuffer,eeFooByteArray1,sizeof(myByteBuffer));
>
> Also so, dass ich nicht die direkte adresse in HEX im EEPROM angeben
> muss sondern, dass ich über variablen arbeiten kann.

Nö, Du arbeitest ja voll im SRAM in der Variable myByteBuffer.
Und das eeprom_write_block speichert dann vom SRAM ins EEPROM an Adresse 
eeFooByteArray1.

Du must also nur Dein eeprom_write_block umschreiben auf externen 
EEPROM, dann wars das.


Peter


P.S.:
Ich mach das auch immer so, auf ner Kopie im SRAM arbeiten.
Das Lesen ist dann schneller, das Schreiben extrem viel schneller und 
man verbräht nicht unnütz Schreibzyklen.
Man schreibt nur auf Anforderung ins EEPROM bzw. liest einmal nach dem 
Reset daraus.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.