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
Wo ist da ein assignment? Vielleicht in der nur undeutlich sichtbaren Zeile davor?
Hallo, welche "undeutlich sichtbaren Zeile davor" soll den das sein? Siegfried
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. ;-)
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
Und trotzdem liegt es nicht an der Zeile mit dem printf()... was soll deiner Meinung nach #if (DebugProtokollMessage == 1) bewirken?
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.
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.
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
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.
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? :-)
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.
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.