www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik fprint Warning [2066]

Autor: Siegfried Saueressig (dieleena)
Datum:

Hallo,
MPLAP 8.4 / C18 Compiler 3.34 / PIC18F2620

bekomme bei  >>>  printf("Test-String\n");  <<< folgende Meldung
Warning [2066] type qualifier mismatch in assignment

Diese Datei  >>>  #include <stdio.h>  <<< ist eingebunden.

vielen Dank im voraus.
Siegfried
Autor: XTerminator (Gast)
Datum:

Compilerdoku lesen.

Die Googlesuche dauert nur ein paar Sekunden.
Autor: Klaus Wachtler (mfgkw)
Datum:

Wo ist da ein assignment?
Vielleicht in der nur undeutlich sichtbaren Zeile davor?
Autor: Siegfried Saueressig (dieleena)
Datum:

Hallo,

welche "undeutlich sichtbaren Zeile davor" soll den das sein?

Siegfried
Autor: A. K. (prx)
Datum:

Siegfried Saueressig schrieb:

> welche "undeutlich sichtbaren Zeile davor" soll den das sein?

Das war eine offenbar zu subtil geratene Aufforderung, mehr vom Code zu
zeigen. ;-)
Autor: Siegfried Saueressig (dieleena)
Datum:

Hallo,

es geht doch nicht darum, das ich nur eine Zeile geliefert habe.
aber bitte:
void del_port(unsigned int index)
{
//
  PortBit      = table_pinlist[index]._bit;
  PortAdresse  = table_pinlist[index]._addr;
  PortZeiger   = &ShiftOut[PortAdresse];
  *PortZeiger  &= ~ PortBit;  //  BIT == 0

//
#if (DebugProtokollMessage == 1)
printf("Test-String\n");
#endif
//
}

ich kann printf auch in die main.c schreiben, immer mit dem gleichem
Ergebnis.

Siegfried
Autor: M. L. (erf)
Datum:

Und trotzdem liegt es nicht an der Zeile mit dem printf()... was soll
deiner Meinung nach #if (DebugProtokollMessage == 1) bewirken?
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

M. L. schrieb:
> Und trotzdem liegt es nicht an der Zeile mit dem printf()...

Da wär ich mir nicht so sicher.

Es gibt in der µC Welt ein paar Compiler, die konstante Strings
automatisch ins ROM legen und nicht ins SRAM. Das ist dann immer wieder
lustig, wenn es darum geht an eine Funktion einen String zu übergeben.
Bei einem konstanhten String braucht man da wieder Sonderfunktionen
dafür, weil man ja einen anderen Pointer hat.

Nur versteh ich vom C18 zu wenig, als das ich mich da auf eine
definitive Aussage einlassen würde.
  char Msg[] = "Test\n";
  printf( Msg );

wenn das problemlos geht, dann durchsuche mal deinen Vorrat an printf
Funktionen, ob es eine gibt, die sich nur in der QUlifizierung des
FOrmatstrings von den anderen unterscheidet.
Autor: Noname (Gast)
Datum:

Kenne mich mit pic nicht gut aus, aber ich habe mal spasseshalber nur
die Warnung gegoogelt und bin auf Anhieb bei einem Eintrag gelandet der
sich auf PIC resp. C Compiler bezieht.
Es geht wohl um den Mix von Speichermodellen der Anwendung und der Lib.
Vielleicht ist das ja das Problem, falls Euch nichts anderes einfällt.
Autor: Siegfried Saueressig (dieleena)
Datum:

Hallo,

"#if (DebugProtokollMessage == 1)" nutze ich derzeitig, um den Programm
Ablauf zu kontrollieren.
printf soll, wenn es funktioniert die Massage an "SIM URAT" und Output
Windows weiterleiten.

da derzeitig printf nicht richtig funktioniert, habe ich diese
abgespeckte Version so eingefügt.

in hlpC18Lib habe ich folgendes gefunden:
Prototype:  int printf (const rom char *fmt, ...);

und in meinem C-Reference Manual:
Prototype:  int printf (char *format, ...);

Siegfried
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Siegfried Saueressig schrieb:

> in hlpC18Lib habe ich folgendes gefunden:
> Prototype:  int printf (const rom char *fmt, ...);
>
> und in meinem C-Reference Manual:
> Prototype:  int printf (char *format, ...);

die vom  hlpC18Lib gilt fuer dich.

Da ist offenbar davon die Rede, dass der Pointer auf einen String im ROM
zeigen muss. Doku rauskramen und nachsehen, wie man das schreiben muss.
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Noname schrieb:
> Kenne mich mit pic nicht gut aus, aber ich habe mal spasseshalber nur
> die Warnung gegoogelt und bin auf Anhieb bei einem Eintrag gelandet der
> sich auf PIC resp. C Compiler bezieht.
> Es geht wohl um den Mix von Speichermodellen der Anwendung und der Lib.
> Vielleicht ist das ja das Problem, falls Euch nichts anderes einfällt.


Was bist denn du für einer?
Du liest wohl auch Doku anstatt bei jedem Wehwechen gleich ins Forum zu
rennen?

:-)
Autor: M. L. (erf)
Datum:

Karl Heinz Buchegger schrieb:
>> Und trotzdem liegt es nicht an der Zeile mit dem printf()...
>
> Da wär ich mir nicht so sicher.

Stimmt stimmt, man sollte nich gleich nach dem Aufstehen was posten
wollen ;). Ich hatte das mit #if defined(...) verwechselt.
Autor: Noname (Gast)
Datum:

Öhm... :-)
Autor: XTerminator (Gast)
Datum:

Noname schrieb:
> Kenne mich mit pic nicht gut aus, aber ich habe mal spasseshalber nur
> die Warnung gegoogelt und bin auf Anhieb bei einem Eintrag gelandet der
> sich auf PIC resp. C Compiler bezieht.

Rat mal, warum ich meinen Kommentar geschrieben habe.
Autor: Siegfried Saueressig (dieleena)
Datum:

Hallo,

mit
char Msg[] = "Test\n";
  printf( Msg );
die gleiche Warnung.

bei "printf("Test-String\n");" wird der Text richtig wieder gegeben.

bei "printf( Msg );" erscheint folgender Text "]j^Op]Op \"


Duko von
printf
Function:  Formatted string output to stdout.
Include:  stdio.h

Prototype:  int printf (const rom char *fmt, ...);

Remarks:  The printf function formats output, passing the characters to
stdout via the putc function. The format string is processed as
described for the fprintf function.
Return Value:  printf returns EOF if an error occurs, otherwise returns
the number of characters output.
Filename:  printf.c

Code Example:  #include <stdio.h>
void main (void)
{
  /* will output via stdout (_H_USART by default) */
  printf ("Hello, World!\n");
}



Siegfried
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

> Prototype:  int printf (const rom char *fmt, ...);
> ...
> printf ("Hello, World!\n");


Sag ich doch.
Das ist wieder irgendein so ein Mist, dass konstante Dinge vom Compiler
automatisch ins ROM Segment gelegt werden.
Da gibt es sicherlich in der Doku auch einen Abchnitt drüber. Vielleicht
gibt auch einen Compiler-Switch mit dem man das einschalten muss, der
bei dir nicht eingeschaltet ist (ist jetzt geraten).

Auf jeden Fall hat das nichts mit Standard-C zu tun, sondern ist eine
Eigenart dieses speziellen Compilers. Daher ist für dich in diesem Punkt
die Compilerdoku das Mass aller Dinge.

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




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net