- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 15

Thema: mal wieder eine EEPROM Frage

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Zitat Zitat von oberallgeier Beitrag anzeigen
    pointer targets in passing argument 1 of '__eewr_word_m328p' differ in signedness
    Der Compiler hast (fast) immer Recht.

    Definition von eeprom_write_word:
    void eeprom_write_word (uint16_t *__p, uint16_t __value)

    Was gibst du rein? Einen pointer auf ein int16_t. Die Funktion erwartet ein uint16_t. Andere "signedness" In dem Fall kann das ignoriert werden.

    Gruß
    Georg

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von schorsch_76 Beitrag anzeigen
    ... Was gibst du rein? ... int16_t. Die Funktion erwartet ein uint16_t ...
    Danke Schorsch. Grad hatte ich (nochmal) nachgegrübelt, nachgesehen und war draufgekommen, dass es auch ein avr-libc-user-manual gibt mit ner site über EEPROM Handling. Und schon hatte es geklappt. Aber da hattest Du schon Deinen Hinweis gepostet. Jedenfalls - vielen Dank, die Warnungen sind abgeschaltet. Dumm, eigentlich hätte ich das Vorzeichen benötigt.

    Der Compiler hat (fast) immer Recht.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Dumm, eigentlich hätte ich das Vorzeichen benötigt.

    Der Compiler hat (fast) immer Recht.
    In deinem Fall sollte das auch mit dieser Funktion klappen. In dieser Funktion wird dann dein int16_t so behandelt als ob es ein uint16_t sei. ABER: Es wird ja nicht gerechnet sondern nur gespeichert. Es geht, in diesem Fall, nichts verloren. Auch beim lesen, kommt dann genau die Zeichenfolge wieder raus.

    Diese Warnung ist dann wichtig, wenn du damit rechnest. Hier wäre bsp. -7 als uint16_t 32768+7 (Zweierkomplement). Aber die Bitfolge ist exakt dieselbe. Das 2^15 Bit ist das Vorzeichenbit. Bei uint16_t ist das ein einfacher Summand in der Zahl wie jede andere Zahl auch. Bei int16_t ist das 2^15 Bit das Vorzeichen.

    Warum machen die Prozessoren das so? Weil mit dem Zweierkomplement eine Subtraktion fast wie eine Addition ausgeführt werden kann

    Gruß
    Georg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress