Hallo, ich habe im Flash ein Array angelegt char device_s [] PROGMEM = "**Blabla** "; Um Zeichen auf einem Display auzugeben habe ich folgende Funktion: void displayausg (char *txt,byte dispadr,byte length, byte from_flash) { byte i; command2lcd (dispadr); for (i=0;i<length;i++) { if (from_flash) { data2lcd (pgm_read_byte(txt)); } else { data2lcd (*txt); txt++; } } } Da ich dieser Funktion auch Texte übergebe, die nicht im Flash liegen, mache ich die Unterscheidung durch die Übergabe "from_flash" Wenn ich nun die Funktion aufrufe displayausg ( device_s,0x80,16,1 ); erhalte ich die Warnung: Warnung: Verarbeiten des Argumentes 1 von »displayausg« streicht Qualifizierer von Zeiger-Zieltypen. Dazu folgende Fragen 1. Will mir der Compiler damit sagen, dass ich dafür sorgen muß, in welcher Speicherklasse der Zieltyp steht (Was ich ja auch mache)? 2. Wie kann ich die Warnung abstellen? Mit einem Cast geht es, weiss aber nicht wieso. displayausg ((char*) device_s,0x80,16,1 ); Viele Grüße Volker
> Dazu folgende Fragen > 1. Will mir der Compiler damit sagen, dass ich dafür sorgen muß, > in welcher Speicherklasse der Zieltyp steht (Was ich ja auch > mache)? Nein. Er will dir sagen, daß du einen Zeiger auf const char an eine Funktion übergibst, die einen Zeiger auf char erwartet und somit wird dabei das const unter den Tisch gekehrt. > 2. Wie kann ich die Warnung abstellen? const char* als Typ für den ersten Parameter wählen. > Mit einem Cast geht es, weiss aber nicht wieso. > displayausg ((char*) device_s,0x80,16,1 ); Weil du damit dem Compiler explizit sagst, daß du das const wegwerfen willst. Ohne den Cast geht er von einem Versehen aus und warnt deshalb.
if (from_flash) { data2lcd (pgm_read_byte(txt)); } else { data2lcd (*txt); txt++; } Etwas offtopic: txt++ wird nur ausgeführt, wenn nicht aus dem Flash gelesen wird. Entweder txt++ auch im ersten if-Teil einfügen oder die Klammerung verschieben. Gruß, Stefan
@Stefan, habe ich bereits gemerkt, nachdem auf dem Display immer nur der erste Buchstaben des Strings über die gesamte Länge geschrieben wurde. Dennoch danke für deine Aufmerksamkeit. Volker
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.