mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [AVR] signed int und EEPROM (GCC)


Autor: Stefan Weßels (swessels)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

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

    test = eeprom_read_byte(&test_EE);
    //.....
}

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion nennt man gemeinhin "Cast".

Autor: Stefan Weßels (swessels)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    test = eeprom_read_byte(&test_EE);

    test = eeprom_read_word(&test_EE);

Autor: Stefan Weßels (swessels)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>    test = eeprom_read_byte(&test_EE);
>
>     test = eeprom_read_word(&test_EE);

Ja, danke. Im richtigen Programm ist es natürlich ein 
eeprom_read_word...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Weßels schrieb:
> Wenn ich das caste kommt
> leider nicht -7 raus....
Sondern?  Wie sieht der Code aus?

Autor: Stefan Weßels (swessels)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

im Anhang sind der Quellcode und der Prinzipschaltplan.
Meine Fragen wären:

1. Kann ich das Problem überhaupt mit einem Cast lösen?
2. Wo genau im Code muss der Cast hin?

Danke für Eure Mühe.

gruß,
Stefan

Autor: Oliver (Gast)
Datum:

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

Autor: Stefan Weßels (swessels)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, "Problem" gelöst... lag wie vermutet zwischen den Ohren.
Zum einen habe ich den Variableninhalt falsch interpretiert, zum zweiten 
castet GCC automatisch.
Zur Sicherheit habe ich trotzdem die entsprechenden Casts eingefügt.

Nochmals danke für die Hilfe!

Gruß,
Stefan

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.