Archiv verlassen und diese Seite im Standarddesign anzeigen : Permanent Speichern
blenderkid
21.05.2008, 15:15
Hi,
ich habe vor Daten zu speichern, die nach dem Neustart immer noch abrufbar sind. Geht das? Vielleicht mit dem EEprom? Ist der überhaupt schon drauf?
DIV blenderkid
Hi,
woeit ich weiß sollte das mit dem EEprom möglich sein, da er die daten behält auch wenn der Strom aus ist. Hier findest du eine beschreibung für eine AVR eeprom lib. http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html
mfg
Erik
Hallo blenderkid,
auf dem RP6 kann man Daten im EEPROM des ATMEGA32 speichern.
Auf der RP6Control M32 Platine kann man das auch und zusätzlich noch im externen SPI EEPROM (IC2).
Gruß Dirk
Besserwessi
21.05.2008, 19:16
Wenn es nur um einen Neustart durch den Reset pin geht, bleibt auch das normale RAM erhalten. Sonst ist das EEPROM die Lösung.
blenderkid
22.05.2008, 10:53
Ja, danke an alle.
Es klappt perfekt mit dem EEPROM
Danke blenderkid
blenderkid
22.05.2008, 16:35
hi, eine Frage noch,
kann ich keine größeren Zahlen als 255 in das EEPROM schreiben?
kann ich keine größeren Zahlen als 255 in das EEPROM schreiben?
Doch, jede Größe die das EEPROM aufnehmen kann, also auch Int oder Long ...
Gruß Dirk
blenderkid
23.05.2008, 15:14
hi, nochmal ich habe noch ein Problem.
Kann man kein "int32_t"-Array machen, oder was ist hier das Problem
int32_t read_buffer[128];
void read_eeprom(void)
{SPI_EEPROM_readBytes(0, &read_buffer[0], 127);}
Ich bekomme beim Kompilieren den Fehler.
RP6Control_10_Move2.c: In function 'read_eeprom':
RP6Control_10_Move2.c:55: warning: passing argument 2 of 'SPI_EEPROM_readBytes' makes pointer from integer without a cast
Kann mir jemand weiter helfen?
DIV blenderkid
Hallo blenderkid,
die RP6ControlLib Funktionen für das EEPROM können nur Bytes lesen oder speichern.
Wenn du 32-Bit Integer speichern willst, must du je Wert 4 Bytes abspeichern, d.h. den Int32_t-Wert zuerst in 4 Byte splitten und ins EEPROM speichern.
Zum Lesen must du die 4 Bytes nacheinander wieder aus dem EEPROM einlesen und in der 32-Bit-Variable ablegen.
Gruß Dirk
blenderkid
24.05.2008, 09:34
wie geht denn das?
DIV blenderkid
Hallo blenderkid,
... wie geht denn das?
Z.B. mit einer Union:
union {
uint32_t bits;
struct {
unsigned byte_1 :8;
unsigned byte_2 :8;
unsigned byte_3 :8;
unsigned byte_4 :8;
};
} spi_transfer;
Damit würdest du mit:
spi_transfer.bits = meine32bitvar;
... deine 32-Bit-Variable in der Union ablegen.
Die 4 einzelnen Bytes (spi_transfer.byte_1 ... spi_transfer.byte_4) können dann ins EEPROM geschrieben werden.
Aus dem EEPROM können sie umgekehrt genauso wieder ausgelesen werden.
Eine andere Möglichkeit:
Schieben.
Byte_1 = meine32bitvar;
Byte_2 = (meine32bitvar >> 8 );
Byte_3 = (meine32bitvar >> 16);
Byte_4 = (meine32bitvar >> 24);
Gruß Dirk
blenderkid
24.05.2008, 20:15
Aus dem EEPROM können sie umgekehrt genauso wieder ausgelesen werden.
Wie macht man das umgekehrt? Anstatt ":8" muss jetzt was?
DIV blenderkid
Wie macht man das umgekehrt? Anstatt ":8" muss jetzt was?
Die Union bleibt, wie sie ist.
Du tust nur die 4 Bytes aus dem EEPROM in spi_transfer.byte_x (x = 1..4) und kannst dann deinen 32-Bit-Wert so zurücklesen:
meine32bitvar = spi_transfer.bits;
Gruß Dirk
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.