uint64_t direkt im EEprom eines AVRs möglich?

Gast #3053172
Lesenswert?
• ▲
▼
Hallo,

kurze Frage:

eine 64-Bit-Integer (uint64_t) direkt im EEprom eines AVRs 
ablegen/auslesen geht nicht, oder?

(wenn nein, mache ich es anders)



#include <avr/eeprom.h>
...
eeprominhalt = eeprom_read_dword(&eezahl);

funktioniert, aber nur mit 32 Bit.

Gibt es eine Alternative zu "..._dword(...", mit der 
64Bit-Unsigned-Integer direkt gelesen (bzw. vorher entsprechend 
abgelegt) werden können?

(benutze übrigens derzeit AVR-Studio 4.19, eventuell spielt das eine 
Rolle)
#3053178
Lesenswert?
• ▲
▼
hermy schrieb:

> Gibt es eine Alternative zu "..._dword(...", mit der
> 64Bit-Unsigned-Integer direkt gelesen (bzw. vorher entsprechend
> abgelegt) werden können?


Meines Wissens nicht. Aber mit Hilfe der eeprom_read_block Funktion ist 
es trivial sich eine entsprechende Funktion zu schreiben.
1
uint64_t eeprom_read_qword( uint64_t* addr )
2
{
3
  uint64_t value;
4
  eeprom_read_block( &value, addr, sizeof(uint64_t) );
5
  return value;
6
}

und die gegenteilige write Funktion ist auch nicht schwerer zu 
schreiben.
Gast #3053194
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> Meines Wissens nicht. Aber mit Hilfe der eeprom_read_block Funktion ist
> es trivial sich eine entsprechende Funktion zu schreiben.

Danke für die Antwort! "Trivial" liegt in dem Fall wahrscheinlich im 
Auge des Betrachters...

Dir schwebt wahrscheinlich so etwas vor:

eeprom_read_block ( Ziel, Quelle, Länge)

?!?
#3053202
Lesenswert?
• ▲
▼
hermy schrieb:
> Dir schwebt wahrscheinlich so etwas vor:
>
> eeprom_read_block ( Ziel, Quelle, Länge)
>
> ?!?

genau.
Was anderes machen die anderen Funktionen (bis auf die Byte Funktion) ja 
auch nicht. Das ist einfach nur eine Anpassung der Datentypen der 
Parameter um sie letzten Endes mit dem entsprechenden sizeof in die 
Read/Write Block Funktion zu stecken.
Nix aufregendes.
Gast #3053253
Lesenswert?
• ▲
▼
Habe es so ausprobiert:

uint64_t eezahl EEMEM = 123456; //zahl frei gewählt

schreiben: eeprom_read_block( &value, &eezahl, sizeof(uint64_t) );

lesen:     eeprom_read_block( &value, &eezahl, sizeof(uint64_t) );

Nach dem Lesen ist value = 0

(Verwirrung)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.