www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Funktion zum Schreiben in externes EEPROM - uint und int


Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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++)

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas B. schrieb:
> void write_eeprom(void *data, uint16_t address, size_t size)

Dankesehr!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.