PIC18F2550 sprintf()

OP #1851223
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
OP #1851302
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.
#1851314
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. =)
Gast #1851322
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
OP #1851344
@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.
OP #1855371
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.
OP #1855488
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 :-)
#1855526
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.
OP #1855792
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.