Forum: Mikrocontroller und Digitale Elektronik fprint Warning [2066]


von Siegfried S. (dieleena)


Lesenswert?

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

von XTerminator (Gast)


Lesenswert?

Compilerdoku lesen.

Die Googlesuche dauert nur ein paar Sekunden.

von Klaus W. (mfgkw)


Lesenswert?

Wo ist da ein assignment?
Vielleicht in der nur undeutlich sichtbaren Zeile davor?

von Siegfried S. (dieleena)


Lesenswert?

Hallo,

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

Siegfried

von (prx) A. K. (prx)


Lesenswert?

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. ;-)

von Siegfried S. (dieleena)


Lesenswert?

Hallo,

es geht doch nicht darum, das ich nur eine Zeile geliefert habe.
aber bitte:
1
void del_port(unsigned int index)
2
{
3
//
4
  PortBit      = table_pinlist[index]._bit;
5
  PortAdresse  = table_pinlist[index]._addr;
6
  PortZeiger   = &ShiftOut[PortAdresse];
7
  *PortZeiger  &= ~ PortBit;  //  BIT == 0
8
9
//
10
#if (DebugProtokollMessage == 1)
11
printf("Test-String\n");
12
#endif
13
//
14
}

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

Siegfried

von M. L. (erf)


Lesenswert?

Und trotzdem liegt es nicht an der Zeile mit dem printf()... was soll 
deiner Meinung nach #if (DebugProtokollMessage == 1) bewirken?

von Karl H. (kbuchegg)


Lesenswert?

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.
1
  char Msg[] = "Test\n";
2
  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.

von Noname (Gast)


Lesenswert?

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.

von Siegfried S. (dieleena)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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?

:-)

von M. L. (erf)


Lesenswert?

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.

von Noname (Gast)


Lesenswert?

Öhm... :-)

von XTerminator (Gast)


Lesenswert?

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.

von Siegfried S. (dieleena)


Lesenswert?

Hallo,

mit
1
char Msg[] = "Test\n";
2
  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

von Karl H. (kbuchegg)


Lesenswert?

> 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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.