Forum: Mikrocontroller und Digitale Elektronik compiler warning bei einem Pointer auf ein const. Objekt


von Tommy (Gast)


Lesenswert?

Hallo,

ich versuche gerade ein Display (5510 Nokia) in Betrieb zu nehmen.
Ich habe mir folgenden Treiber heruntergeladen:
http://www.jtronics.de/avr-projekte/display-nokia3310.html
Anscheinend wurde das mit einem anderen Kompiler kompiliert, jedenfalls 
waren einige Fehler drin.

Linien zeichnen geht -> Display ist schon mal richtig angeschlossen.
Mein Kompiler hat sich nun an folgender Zeile aufgehängt:
1
static uint8_t __attribute__ ((progmem)) f8x8[] = {...
Soweit ich rausgefunden habe, müssen die wohl noch als konstant 
deklariert werden:
1
static const uint8_t __attribute__ ((progmem)) f8x8[] = {...

Er wirft jetzt folgende Warnung:
Warning  1  passing argument 1 of 'N3310_SetFont' discards 'const' 
qualifier from pointer target type [enabled by default]
bei der Zeile in der main.c:
1
 N3310_SetFont(&f8x8[0]);


Die Funktion sieht so aus:
1
 void   N3310_SetFont(uint8_t  *pointer)      {FontPointer = pointer;TextBreite = pgm_read_byte_near(&FontPointer[2]);}

Ich habe das dann in const uint8_t  *pointer abgeändert (Pointer auf 
konstantes Objekt), leider hat dies keine Besserung gebracht.

Er wirft nun die Warnung
Warning  3  assignment discards 'const' qualifier from pointer target 
type [enabled by default]
bei dieser Zeile:
1
 FontPointer = pointer

Hätte jemand der c-Profis einen Tip?
Vielen Dank!
Liebe Grüße
Tommy

von g457 (Gast)


Lesenswert?

> Warning  3  assignment discards 'const' qualifier from pointer target [..]
> FontPointer = pointer
>
> Hätte jemand der c-Profis einen Tip?

Dazu brauchts keinen C-Profi - einfach das const weiter 
durchpropagieren, hier beim FontPointer.

Stell Dich drauf ein, dass Dir der Compiler noch ein paar mehr Stellen 
sagen wird wo es noch nicht passt.

von Christian J. (Gast)


Lesenswert?

Welcher Compiler? Macht der sdcc auch und es hat keine neg. 
Auswirkungen.

const char* const test[] = {.............}

erzeugt diesen Fehler bei Verwendung von test.

#pragma disable_warning #

hilft auch :-)

von Kaj (Gast)


Lesenswert?

Tommy schrieb:
> discards 'const' qualifier
Das sagt, das du etwas, das als const deklariert ist, an etwas "zuweist" 
das nicht const ist, also sowas:
1
void foo(char* p);
2
3
int main(void)
4
{
5
  const char x[] = "Hallo Welt";
6
  foo(x);
7
}
x ist const, p aber nicht, daher die warnung. einfach zu beheben durch:
1
void foo(const char* p);

von Tommy (Gast)


Lesenswert?

Okay Danke.
Warnung ist weg. Gehen tut es trotzdem noch nicht ;-)
Schönen Abend euch und noch mal Danke.

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
Noch kein Account? Hier anmelden.