Funktion zum Schreiben in externes EEPROM - uint und int

Gast #1920100
Lesenswert?

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...
Gast #1920201
Lesenswert?

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++)
Gast #1920305
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren