Hallo, ich programmiere den PIC18F4550 und verwende den C18 Compiler von Microchip (MPLAB). Allerdings erhalte ich immer folgende Warnung: "Warning [2066] type qualifier mismatch in assignment" void main() { char buffer [17]; .... .... .... sprintf (buffer, "Test"); .... .... .... } Kann mir jemand erklären wie ich die Warnung weg bekomme oder eine Quelle nennen, die mir weiter hilft? Schon mal vielen Dank Stefan
Ich kenne jetzt deinen PIC und deinen Compiler nicht. Aber aus C-Sicht spricht nichts gegen diese Zeilen; es sei denn du hast das #include <stdio.h> vergessen. Wenn du dann z.B. vorher irgendwo ein sprintf() mit anderer Parameterliste hast, dann nimmt der Compiler eine dafür passende Deklaration von sprintf() an (ohne die ...-Deklaration aus stdio.h zu kennen) und bei deinem obigen Aufruf knirscht es dann etwas.
Danke für die schnelle Antwort. #include <stdio.h> ist eingebunden. Dort liegt das Problem nicht. Ich verwende die Formatierung in sprintf um eine Zeichenkette im Display auszugeben, was auch einwandfrei funktioniert. Ich erhalte eben nur diese Warnung beim Compilieren. Ich erhalte die Warnung auch, wenn ich nicht in das LCD Display schreibe. Dort ist also der Fehler nicht versteckt. Meine Sorge ist, dass irgendwann der fall eintritt und die Warnung zum Problem wird.
Stefan D. schrieb: > #include <stdio.h> ist eingebunden. Dort liegt das Problem nicht. ... > auszugeben, was auch einwandfrei funktioniert. Ich erhalte eben nur > diese Warnung beim Compilieren. Zeig bitte den richtigen Code Aus dem bischen ist nicht wirklich etwas zu entnehmen. Ausser natürlich, dass der sprintf hier mit Kanonen auf Spatzen geschossen ist, ein strcpy( buffer, "Test" ); hätte es auch getan. Aber das ist jetzt nicht das Thema.
Karl heinz Buchegger schrieb: > Zeig bitte den richtigen Code > Aus dem bischen ist nicht wirklich etwas zu entnehmen. Der ganze Code wuerde meiner Meinung nach vom Problem ablenken. Deshalb habe ich hier mal ein bisschen Code geschrieben in dem der Compiler die Warnung auswirft.
1 | #include <p18cxxx.h> |
2 | #include <stdio.h> |
3 | #include <stdlib.h> |
4 | |
5 | void main( void ) |
6 | {
|
7 | int x=0; |
8 | char buffer[17]; |
9 | sprintf ((rom char*)buffer, "test %d",x); |
10 | }
|
Karl heinz Buchegger schrieb: > Ausser natürlich, dass der sprintf hier mit Kanonen auf Spatzen > geschossen ist, ein "sprintf" verwende ich, da ich auch den Inhalt von Variablen ausgeben möchte. @Stefan B. Ich glaube das ist der richtige Ansatz und beruhigt mich ein bisschen. Zumindest glaube ich jetzt die Ursache zu kennen. Auch wenn ich noch keine Lösung habe, bringt mich das doch weiter. Zudem gefällt mir der "C COMPILER USER’S GUIDE." Sobald das Problem gelöst ist werde ich es hier posten. Dieses kann aber ein bisschen Dauern. Natürlich freue ich mich auch weiterhin über hilfreiche Tips. Vielen Dank
> char buffer[17]; > sprintf((rom char*)buffer, "test %d",x); Der Cast sitzt am falschen Platz. buffer ist nicht im rom (program memory) sondern der Formatstring ("test %d") ist dort. Wäre buffer ein Zeiger ins ROM, könnte sprintf schwerlich dorthin schreiben :) Warnungslos sollte sein: sprintf(buffer, (rom char*) "test %d", x); Bzw. kann es erforderlich sein ein far hinzuzufügen, wenn du im Programm mit near Pointern als Default arbeitest.
Stefan B. schrieb: > Warnungslos sollte sein: > sprintf(buffer, (rom char*) "test %d", x); Das ist die Lösung. Mit "sprintf(buffer, (far rom char*) "test %d", x); kann ich fehler- und warnungslos kompilieren. Vielen Dank!!!
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.