PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EEPROMex writeBlock time_t



Cysign
15.06.2015, 04:20
Hallo zusammen,

ich würde gerne mit der Libary EEPROMex von http://playground.arduino.cc/Code/EEPROMex einen Timestamp vom Typ time_t (32bit) im EEPROM ablegen.

Auf der verlinkten Seite steht

Data blocks
Using the block functions any data can be read, written and updated:

int readBlock(int address, const T& value)
int writeBlock(int address, const T& value)
int updateBlock(int address, const T& value)


where T is the type of the data to read/write/update. This can be a basic type, but also a more complex type like a struct. The return value gives the number of bytes that have been read, written or updated.



Allerdings komm ich einfach nicht drauf, wie ich den Tiemstamp ins EEPROM legen kann. Egal was ich versuche, ich bekomme immer eine andere Fehlermeldung.

Hat vielleicht jemand von euch mal mit der Lib gearbeitet und kann mir mit dem Zaunpfahl zuwinken?

Cysign
16.06.2015, 18:55
So, ich hab jetzt über Google+ drei Lösungen vorgeschlagen bekommen, wovon zwei funktionieren. Die möchte ich euch nicht vorenthalten ;)


//int writeBlock(11,(const time_t) 1424267490); // doesn't work...
//EEPROM.writeLong(11,(unsigned long) 1424267490); // WORKS!
//EEPROM.writeLong(11, 1424267490); // WORKS

Sisor
16.06.2015, 19:26
Kann es sein, dass der Datentyp time_t gar nicht definiert ist?
Kann man leicht nachholen:
typedef unsigned long time_t;

Cysign
16.06.2015, 19:49
time_t ist der Timestamp, den du durch Libs wie time.h und rtc.h bekommst. Also gehe ich davon aus, dass er definiert ist ;)

Siehe auch: http://www2.informatik.uni-halle.de/lehre/c/c_time.html

In den funktionierenden Beispielen wird auf unsigned long zurückgegriffen, da diese vom selben Typ sind. Ich weiß aber noch nicht, ob diese mittelt
time_t meineVariable = (time_t) EEPROM.readLong(11); wieder als time_t zurückgecastet werden müssen. Das probier ich gleich aus ;)