mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 sprintf()


Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes problem. Erst mal ein ausschnitt aus meinem Code:

AD_10();            //Einholen des Wertes vom AD Wandler (10 Bit)

sprintf(lcd_text,"%u",Wert);  //In dieser Zeile folgender fehler: 
Warning [2054] suspicious pointer conversion

LCD_write(lcd_text[0]);      //Ausgeben der Stellen im Array
LCD_write(lcd_text[1]);      //
LCD_write(lcd_text[2]);      //
LCD_write(lcd_text[3]);      //

LCD_data(2);          //LCD wieder an erste Stelle

So nun zu meinem problem. In der Zeile mit dem sprintf-Befehl bekomme 
ich immer den dahinterstehenden fehler vom Compiler.
Kann mir jemand helfen. Achso meine include-Dateien:

#include <p18f2550.h>
#include <delays.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

Ich bitte lediglich um hilfe und nicht darum blöde kommentare zu 
bekommen oder den Hinweis auf die Suche. Ich habe gesucht, aber keine 
passende Lösung zu meinem problem gefunden.

Ich danke schon mal im vorraus für Hilfe.

Mit freundlichen Grüßen

Marco

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist "lcd_text" deklariert?

char lcd_text[6]; ?

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kompletter Code bitte ansonsten kann man nichts machen. Genauso den 
Fehler bitte posten.

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also den kompletten Quellcode hab ich auf einem anderen PC. Kann den 
also erst ab Montag komplett schreiben.

Also das Array ist:
char lcd_text[21];

Der Fehler ist einfach nur diese Warnung:
Warning [2054] suspicious pointer conversion

Da fällt mir einen das ich den eigentlichen fehler gar nicht beschrieben 
hab.
Auf dem LCD soll der Wert z.B. 1023 sein. Was auf dem LCD aber 
erscheint, ist "u|||".

Also wenn das absolut nicht reicht also info...dann lade ich am Montag 
den Quellcode hoch.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Hinrichs schrieb:
> LCD_write(lcd_text[0]);      //Ausgeben der Stellen im Array

Was für einen Compiler verwendest du denn ? Den von Microchip ?

Mein Verdacht geht in die Richtung, dass

Marco Hinrichs schrieb:
> sprintf(lcd_text,"%u",Wert);

in dieser Form nicht geht. Ich nehme an, dass du einen Pointer für 
lcd_text benötigst.

Versuch mal ob

sprintf(*lcd_text,"%u",Wert);

besser geht.

Pointerinitialisierung natürlich nicht vergessen. =)

Autor: abc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Meldung ist mir bisher noch nicht untergekommen, aber es kann sein, 
dass das Display nur den ersten Wert "u" bekommt und den Rest als Fehler 
bzw. als inhaltslose Bytes - deswegen immer dasselbe "|". Was ein Fehler 
beim Senden sein könnte - z.b. wenn W-Register und Status-Bits nicht 
gesichert werden, man alles vorher einliest und dann beim ersten Senden 
W überschreibt/cleared.

Da ich deine Zeichentabelle bzw. das Displaydatenblatt nicht vor mir 
habe würde ich vermuten du codierst es falsch und deine "1" in 
binär/hex/dezimal/ascii? macht dann auf dem Display ein "u" daraus.

Aber wie gesagt alles reine Spekulation ohne weitere Infos zu Hard- und 
Software.

mfg

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@abc

Wenn ich einen fest definierten Wert nehme, z.B. 1 und den ausgebe, geht 
es.
Dann steht auf meinem LCD eine 1.

Erst wenn ich dies über den sprintf mache geht es nicht mehr...dann 
kommt nur noch Grütze :-)

@Michael

Ich werde es mal mit einem Pointer versuchen. Aber wie gesagt, ich hab 
den Quellcode nicht hier und muss bis Montag warten.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab nachgekuckt:

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

liegt wohl an den Pointern.

Autor: Marco Hinrichs (purzelbaum)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
In der txt hab ich den kompletten Quellcode ohne Pointer.

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab es nun auch mit einem Pointer versucht und das einzige was 
das Display anzeigt ist Müll :-)
Bin ein bisschen überfragt...schreibe ich einen Wert in eine Variable 
und gebe diese aus, geht es. Schreibe ich allerdings einen oder mehrere 
Werte in ein Arrey und gebe dieses aus, kommt wie bei dem Pointer nur 
Müll.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähhh funktioniert das Dislpay überhautps ?

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja :-) das hab ich mir auch gedacht, ob das eventuell kaputt ist :-), 
aber es geht wenn ich halt meine Funktion aufrufe mit:
LCD_write('a');
dann schreibt er auf das Display ein a. Ich hab das a auch in einer 
schleife schreiben lassen und in beiden Zeilen standen a`s :-)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Hinrichs schrieb:
> sprintf(lcd_text,"%u",Wert);  //In dieser Zeile folgender fehler:
> Warning [2054] suspicious pointer conversion

Das dürfte darauf zurückzuführen sein, dass Du lcd_text[] als unsigned 
char[] vereinbart hast, sprintf aber ein char[] erwartet (was lt. Google 
bei Deinem Compiler signed ist).  Nimm mal das unsigned bei der 
Vereinbarung von lcd_text[] weg, dann sollte die Warnung verschwunden 
sein.

Das eigentliche Problem dürfte weiterbestehen, ist aber davon 
unabhängig.  Da wirst Du weiter suchen müssen.

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das eigentliche problem besteht auch weiterhin...
Ich glaube es liegt am PIC selbst oder an den Einstellungen des PIC´s.

char      test[21];
unsigned char  bla=0;

sprintf(test,"Hallo Welt");

for(bla=0;bla<=8;bla++)
{
  LCD_write(test[bla]);
}

Schreibe ich es so, steht auf dem Display:
allo Welt#
Die Raute steht für ein Zeichen, das ich so nicht schreiben kann :-D

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.