www.mikrocontroller.net

Forum: Compiler & IDEs warning: passing arg 1 of `eeprom_read_byte' makes pointer f


Autor: Rico Jonschkowski (rico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin. Ich hab nen Problem beim lesen und beschreiben des EEPROM. Zwar 
funktioniert alles, aber ich bekomme eine Warnmeldung und die würde ich 
gern verstehen und beheben:

...
#define EEP_ADD_0 1
...
if (eeprom_read_byte(EEP_ADD_0) == 1)
...

-> warning: passing arg 1 of `eeprom_read_byte' makes pointer from 
integer without a cast

interessanterweise tritt diese Warnung nicht auf, wenn ich EEP_ADD_0 als 
0 definiere.

Wär sehr nett, wenn mir jemand helfen könnte.

mfg rico

Autor: FBI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

steht doch eigentlich schon in der Warnung drin!
'eeprom_read_byte' erwartet als Parameter einen Pointer und Du fütterst 
die Funktion mit einem 'int'.

CU

Autor: FBI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... btw. 0 (NULL) ist ein gültiger Pointer, deshalb kommt in dem Fall 
keine Warnung.
Ansonsten:
  eeprom_read_byte((uint8_t*)EEP_ADD_0)

Autor: Rico Jonschkowski (rico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!

Hab nur noch ne Frage zum Verständnis:
Warum ist der Adresszeiger bei read_word ein (uint16_t*)? Zeigt der 
nicht genau wie beim read_byte auch nur auf EINE Speicheradresse?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Adresszeiger für ein Objekt, das 16 bits groß ist, sollte halt ein
Zeiger sein, der auf ein 16-bit-Objekt zeigt, nicht wahr?

Klar besteht das 16-bit-Objekt aus zwei Bytes, und der Zahl, die den
Zeiger repräsentiert, sieht man nicht an, wie viele Bytes ab dieser
Stelle gelesen werden sollen.  Der Rest ist die Semantik des Compilers,
die er in einen Zeiger hineinlegt.

Analog wird bei den Blocklesefunktionen, bei denen man vom Typ her ja
nicht aussagen kann, wie groß der Block werden soll, ein generischer
zeiger (void *) benutzt.

Das ist aber alles mehr kosmetisch bzw. "politisch korrekt".

Autor: Rico Jonschkowski (rico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähm, ok. Man sollte also nicht weiter darüber nachdenken ...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum? Was findest du daran unlogisch?

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch beim auslesen eines WORD, müsste der Adresszeiger doch bloß auf das 
erste der beiden BYTES zeigen. Nur das dann eben noch ein weiteres BYTE 
ausgelesen wird... Zumindest hab ich mir das so vorgestellt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kannst du in C im Prinzip immer. Zeigertypen sind aber genau deshalb 
da, damit man hier unterscheiden kann. Würdest du es wirklich logischer 
finden, wenn du eine 16bit-Variable definierst, dann den Zeiger darauf 
erst in einen Zeiger auf 8 Bit konvertieren mußt, nur damit die Funktion 
dann trotzdem 16 Bits einliest?

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne, wahrscheinlich nicht... ich sollte mich, wenn ich Zeit hat aber mal 
intensiver mit Zeigern befassen! Vielleicht schaff ich das, wenn der 
ganze Robocup-Kram vorbei ist.

Nochmal Danke an alle Antworten!

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.