Compiler Warnung

Gast #363169
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
> 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
Gast
@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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.