Compiler Warnung

Gast #363169
Lesenswert?
• ▲
▼
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
Gast #363170
Lesenswert?
• ▲
▼
> 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.
Gast #363173
Lesenswert?
• ▲
▼
@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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.