Hallo zusammen, ich habe eine Frage zu den Lese- und Schreibfunktionen des EEPROMs. Aktuell habe ich die Speicheradresse für das EEPROM in einer uint16_t gespeichert und übergebe diese an die eeprom_write_word und eeprom_read_word. Das funktioniert auch, allerdings wirft der Compiler ein Warning, dass er einen Pointer erwartet und keinen Integer Wert (siehe Anhang). Ich habe leider keine Ahnung, wie ich die Speicheradresse als Pointer übergeben kann. Hat da vielleicht jemand eine Idee?
Sebastian F. schrieb: > Ich habe leider keine Ahnung, wie ich die Speicheradresse als Pointer > übergeben kann. Mit einem typecast. Übrigens kann man textuelle Meldungen auch ganz ohne Screenshots mit copy&paste zitieren. ;-)
Vielen Dank für die schnelle Antwort:) Folgendes habe ich bereits probiert, allerdings wird mir da der selbe Fehler angezeigt.
1 | |
2 | |
3 | |
4 | |
5 | |
Wie wäre es einfach mit
1 | |
um etwas von EEPROM-Adresse 42 zu lesen?
Sebastian F. schrieb: > value = eeprom_read_word(*p_adress); Das hätte übrigens mit
1 | |
funktioniert, denn dann übergibst du wieder einen Zeiger. So aber dereferenzierst du den Zeiger wieder, womit du auf dessen Inhalt zugreifst. Das ist nicht, was du willst. Aber die Zwischenvariable ist schlicht nicht nötig. Die Idee, warum diese Funktionen Zeiger nehmen und keine Zahlen ist, dass man EEPROM-"Variablen" anlegen kann:
1 | |
2 | |
3 | |
4 | |
5 | |
In diesem Falle überlässt man Compiler und Linker die tatsächliche Adressaufteilung des EEPROMs.
?♂️ es kann manchmal so einfach sein... Vielen Dank für die schnelle Lösung meines Problems!
Gast
#6348416
Oder so (falls AVR): (das EEMEM Makro ist schnell gebaut, wenn dein System das nicht kennt)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Wenn man allerdings Wert auf eine bestimmte Reihenfolge der Elemente im EEPROM legt (weil man sie beispielsweise auch von außen über den Programmer lesen oder modifzieren können möchte), dann ist es das sinnvollste, dass man alle EEPROM-Daten in einer einzigen Variablen als struct hinterlegt. Ansonsten kann einem der Linker die Adressen irgendwie nach seinem Gusto sortieren.
Gast
#6348421
Jörg W. schrieb: > Ansonsten kann einem der Linker die Adressen > irgendwie nach seinem Gusto sortieren. Ja, das tut er. Jörg W. schrieb: > in einer einzigen Variablen als struct Dafür wurde offsetof() erfunden, um dann noch einzelne Werte da raus picken zu können. Ansonsten: Ich spreche mich klar gegen das händische berechnen der EEPROM Adressen aus. Denn Kompiler und Linker machen da keine Flüchtigkeitsfehler. Menschen schon. Auch hat die gewonnene Typsicherheit einiges an Vorteilen gegenüber Pointercasts. Mantra: > Jeder vermeidbare Cast, ist ein böser Cast. > Jeder vermiedene Cast, ist ein guter Cast.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
