Hallo! Wenn ich sowohl unsigned int wie auch signed int in ein EEPROM schreiben will, so sind die Funktionen zum schreiben ja generell gleich. In beiden Varianten nehme ich die zu schreibenden Daten und wandele sie in uint8 um und schreibe sie sequentiell ins EEPROM. Muss ich für beide Varianten eigene Funktionen haben, oder die mache ich es? Beispiel: int16_t wird zu (uint8_t) (daten >> 8) - Byte 1 (uint8_t) (daten) - Byte 2 der uint wird genauso behandelt. Aber beim Funktionsaufruf zum Schreiben muss ich ja unterscheiden zwischen void write_eeprom (int16_t daten, uint16_t addresse) und void write_eeprom (uint16_t daten, uint16_t addresse) Wie kann man das elegant lösen, oder muss ich zwei Funktionen dafür haben? Genauso halt beim zurückholen...
Jetzt komm ich glaube ich grad selber drauf... Ich kann die Adresse übergeben und dann unter Angabe der zu schreibenden Bytes mittels (uint8_t*)-Pointer die Daten holen, oder?
Wenn du mit einer Warnung leben kannst, brauchst du garnichts tun. Da wird der unsigned automatisch auf signed gecastet oder andersrum. Das Ergebnis ist dann vielleicht undefiniert, aber es wird wahrscheinlich trotzdem tun was du willst. Die Warnung kannst du loswerden, indem du - Einen typecast beim Aufruf reinschreibst - Ein Makro schreibst (Das z.B. den Typecast für dich macht) - templates verwendest (C++)
Mach doch void write_eeprom(void *data, uint16_t address, size_t size) Das funktioniert für alle Datentypen. Wegen void-Pointer werden auch keine casts gebraucht. Nachteil: Die zu sendenden Daten müssen im Speicher abgelegt sein (also mindestens lokale Variable), einfach eine Konstante zum Schreiben übergeben geht nicht direkt.
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.