[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

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