eeprom_read_word()

Gast #100000
Lesenswert?
• ▲
▼
Ich dachte, ich hätte die EEProm Funktionen langsam verstanden aber bei
dem Quellcode:
u16 globalupdays _attribute_ ((section (".eeprom"))) = {0};
u16 uptimedays;
Und in einer Funktion dann:
uptimedays = eeprom_read_word(&globalupdays);

Gibt der Compiler eine Warnung aus: passing arg 1 of
`eeprom_read_word' form incompatible pointer type
Ersetze ich read_word durch read_byte und u16 globalupdays durch u08
globalupdays gibt es keine Warnungen.
Was habe ich falsch gemacht?
Gast #100001
Lesenswert?
• ▲
▼
Kann ich nicht nachvollziehen:

% cat foo.c
#include <avr/eeprom.h>
#include <inttypes.h>

uint16_t eefoo;
uint16_t foo;

void
readfoo(void)
{
        foo = eeprom_read_word(&eefoo);
}
% avr-gcc -W -Wall -c -mmcu=at90s8515 -O foo.c
%
Gast #100004
Lesenswert?
• ▲
▼
Also wenn ich wie in dem Beispiel von Jörg, anstelle von u16
globalupdays mit uint16_t deklariere funktionierts ohne Warnungen.
u16 steht bei mir für unsigned short.
Wenn ich mir die inttypes.h ansehe ist uint16_t als unsigned int
definiert.
Laut
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/basic_42.asp
würde
#typedef unsigned int uint16_t;
also 4 anstelle von 2 Byte belegen, und somit aus meiner sicht genau so
viel wie
#typedef unsigned long uint32_t;
Wo wäre dann denn der Unterschied zwischen uint16_t und uint32_t? Auch
reichen mir 16 Bit.
Gast #100005
Lesenswert?
• ▲
▼
Warum benutzt die eine Dokumentation, die nicht zum Produkt passt?
Schon mal versucht, mit ner Bedienungsanleitung vom Motorrad Auto zu
fahren? :-)

Wenn u16 bei Dir für unsigned short steht, und der Funktionsprototyp
für eeprom_read_word uint16_t verlangt, welcher mit unsigned int
deklariert wurde, dann hast Du zwei verschiedene Typen vermischt. Und
das klagt der Compiler - völlig zu recht - an.

Gruß,
Patrick...
Gast #100006
Lesenswert?
• ▲
▼
Die [u]intNN_t Definitionen in <inttypes.h> (*) sind ja genau für den
Zweck bestimmt, daß man damit Datentypen bekommt, die unabhängig von
der zugrundeliegenden Architektur eine bestimmte Bitbreite besitzen.

Das ist C-Standard (ISO-C99 allerdings, nicht ISO-C90 alias
ANSI-C89)!

(*) Eigentlich sollten sie in <stdint.h> stehen, aber das müssen wir
erst noch machen.  <inttypes.h> zieht aber per Standard die
Definitionen aus <stdint.h> ohnehin mit rein, insofern ist das auch
zukunftssicher.

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.