mikrocontroller.net

Forum: Compiler & IDEs Erklärung der Fehlermeldung


Autor: Julius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze die library von fleury und wollte jetzt etwas auf dem Diplay 
ausgeben, allerdings meckert er immer mit:
../test0005.c:43: warning: passing arg 1 of `lcd_puts' makes pointer from integer without a cast

Ich weiß nicht warum...


Hier noch der Programmschnipsel, den er bemeckert:
lcd_puts (counter);
counter++;
timer(250);

Das befindet sich in einer for-Schleif...

Mein Ziel ist es dass er einen Countdown macht, aber ich fange erstmal 
mit einem "Countup" an ;)

Kann mir jemand helfen?

Danke schon einmal

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus dass lcd_puts einen String bzw. einen Pointer auf 
char haben möchte. Deine Variable counter ist aber bestimmt vom Typ int.

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ja.

schau dir bitte die deklaration von lcd_puts an. ich behaupte mal (kenne 
die selber nicht), das lcd_puts einen pointer erwartet. dein counter 
aber ein int (oder etwas verwandtes ist. dann gibst du ihm (dem 
compiler) eine zahl, die ja auch eine adresse bezeichnen kann. aber der 
compiler bezweifelt das (zu recht zumeist) an.

hth,
bye kosmo

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void  lcd_puts (const char *s) 

Wenn ich die int in char umwandle funktioniert es trotzdem nicht...

In was muss ich die int umwandeln?

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieo in nen char?

da steht ein "char*", was ein pointer ist!

du willst die zahl auf das display ausgeben? dann kommst du um die 
umwandlung der zahl in einen string (char*) nicht drum rum.
bye kosmo

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ein typecast reicht hier übrigens nicht aus, da du ja das 
entsprechende ASCII-Zeichen auf dem Display haben möchtest. Google mal 
nach itoa oder ähnlichem.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum reicht ein typcast nicht aus?

Das ASCII-Zeichen wird doch von der Funktion von Fleury erzeugt, ode 
rnicht?

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö.

Die Funktion will einen String. Wenn du ihr z.B. den Wert 50 in einer 
char-Variablen gibst, zeigt er dir das ASCII-Zeichen Nr. 50 an. Das ist 
aber das Zeichen '2' und nicht die '50'.

Schau mal hier:

Beitrag "lib für Pollin LCD (WINTEK2704)"

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guter Link, aber ich verstehe das nicht ganz...

Warum nimmt er statt der Zahl 50, das dafür stehende Zeichen? Das z.B. 
verstehe ich nicht ganz...

Kann mir vielleicht jemand kurz posten wie das gehen soll, denn 
irgendwie stehe ich gerade mordsmäßig auf dem Schlauch...

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus, dass dein Display ASCII-Zeichen erwartet, 
genauso wie es Terminalprogramm am PC oder die Ausgabe im DOS-Fenster 
von Windows verlangt. Also mußt du ihm auch welche geben. Du mußt im 
Kopf unterscheiden zwischen "Zahlen" und "Zeichen". Wenn du das Zeichen 
für "50" ausgeben willst, damit 50 auf deinem Display erscheint, musst 
du ihm den entsprechenden ASCII-Wert liefern.

Die ASCII-Tabelle findest du überall im Netz. Da kannst du sehen welches 
Zeichen welche Nummer hat.

Ansonsten mußt du einfach deine Integer-Zahl mit einer Routine in ein 
ASCII-Zeichen umwandeln. Das macht z.B. itoa, wenn das deine Library 
anbietet.

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum sollte er dir die zeichenfolge "50" ausgeben?

deine zahl ist eine zahl. ende, aus. das ist alles, was den rechner 
interessiert. die darstellung ist lediglich für unsereins interessant. 
visualisiert wird eine zahl durch ziffern. um beim beispiel zu bleiben: 
eine 5 und eine 0. das ist dann schon eine zeichenkette, ergo ein 
string. gibtst du dem rechner eine 50 als zeichenkette, versucht er 
selbstredend, das entsprechende zeichen/ziffer hinter der 50 auszugeben 
(character-encoding). willst du die zahl 50 mit ihren beiden ziffern als 
zeichenkette ausgeben, musst du das encoding für jede ziffer raussuchen 
und aneinander hängen (bei ascii also 0x35 und 0x30, iirc).

vll hilfts ja (ist doch alles logisch) g)
bye kosmo

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke.

Das heißt ich muss entweder für jede ziffer von 0 bis 9 die 
entsprechende ASCII Nummer herausfinden und dann der Funktion LCD puts 
geben oder ich benutze dieses itoa?

Wenn ja, dann wäre das mit dem itoa vermutlich viel eleganter, oder?

Könnte man mir vielleciht ein Beispiel für itoa geben?

Danke :)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char Buffer[20];
itoa( counter, Buffer, 10 );
lcd_clrscr ();
lcd_putc (Buffer);
timer(250);
counter++;

ergibt immernoch eine Fehlermeldung:
../test0005.c:46: warning: passing arg 1 of `lcd_putc' makes integer from pointer without a cast

Autor: Joerg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.. jetzt hast du "puts" und "putc" vertauscht: putc überträgt ein char 
(wie der Name suggeriert), outs überträgt ein Array (dt. Feld) von chars 
- einen string - bis zu dessen Ende (0, '\0').
Arrays werden in C als Pointer auf das 1. Element an Funktionen 
übergeben. (alles wirkliche C-Grundlagen!).

hth. Jörg

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, vielen Dank.

Das letzte war echt ein dummer Fehler -.- Sorry

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.