[AVR] signed int und EEPROM (GCC)

OP #2056352
Lesenswert?
• ▲
▼
Hallo zusammen,

ich möchte einen signed int im EEPROM ablegen. Mit dem folgenden 
Codeschnipsel
1
//...
2
int16_t test_EE EEMEM = -7;
3
//...
4
int main(void) {
5
    int16_t test;
6

7
    test = eeprom_read_byte(&test_EE);
8
    //.....
9
}

kommt (sinngemäß) die Warnung " xyz differs ind signedness".

Nach einem Blick in die libc dokumentation ist mir die Ursache klar.

Die Frage: Gibt es eine fertige Funktion mit der ich signed integers 
direkt ins EEPROM schreiben und auslesen kann oder muss ich mir da etwas 
selber bauen?

Für meinen Anwendungsfall (elektronisches V-Kabel mit einstellbarer 
Servomitte) kann ich mit nem kleinen Workaround auch uint16_t nehmen. 
Es gibt aber sicherlich auch Fälle in denen das nicht praktikabel ist.

Danke und Gruß,
Stefan
OP #2056364
Lesenswert?
• ▲
▼
Martin schrieb:
> Die Funktion nennt man gemeinhin "Cast".

Das ist mir durchausd bekannt, auch wenn ich es selten benötige. 
Vielleicht habe ich auch nur nen Knoten zwischen den Ohren.

Mit dem Code
1
int16_t test_EE EEMEM = -7;

steht in der Variable  0xFFF9, was ja aufgrund des Datentyps uint16_t 
auch richtig ist, da die Variable überläuft. Wenn ich das caste kommt 
leider nicht -7 raus....

Gruß,
Stefan
Gast #2056835
Lesenswert?
• ▲
▼
Stefan Weßels schrieb:
> 1. Kann ich das Problem überhaupt mit einem Cast lösen?

Welches Problem?

Stefan Weßels schrieb:
> 2. Wo genau im Code muss der Cast hin?

Überall dorthin, wo der Compiler eine Warnung ausgibt.

Sieh es mal so: Die eeprom-Funktionen lesen und schreiben ein Byte bzw. 
ein Word. Das sind 8 bzw. 16 Bits, deren Bedeutung dem EEPROM völlig 
egal ist.

Den passenden Datentyp musst du dem C-Compiler per Cast (in beide 
Richtungen) mitteilen. Das wirst du schon hinkriegen...

Oliver

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.