mikrocontroller.net

Forum: Compiler & IDEs ... "discards qualifiers from pointer target type"


Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich bin grade dabei einen ATMega8 mit dem AVR-GCC Compiler zu
programmieren. Allerdings spuckt der Compiler immer folgende Warnungen
aus:
"warning: passing arg 1 of `uartReceiveByte' discards qualifiers from
pointer target type"
Ich will der Funktion einfach die Adresse einer Variablen übergeben.
Der Code dazu sieht so aus:
"uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] )".
Weiß einer was das bedeuted, wie man das weg bekommt bzw ob man das
ignorieren darf. Ich hab dazu nix brauchbares gefunden.
Vielen Dank schonmal
mfg Michael

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const oder volatile ignoriert.

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke. Ich habe jetzt alle Betreffenden Variablen mit volatile
gekennzeichnet. Hilft aber leider nichts. Das ganze sieht jetzt so aus
(das is alles global)
typedef struct
{
  volatile uint8_t    adress;
  volatile uint16_t    bytes;
  volatile uint8_t  *  data;
  volatile uint8_t    isvalid;
  volatile uint16_t    connected;
  volatile uint8_t    lastSent;
  volatile uint8_t    buffer[MAX_PACKET_SIZE];
  volatile uint8_t    bufferlength;
}rs485data;
volatile rs485data g_rs485data;
Der Aufruf der Funktion sieht so aus:
uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] );

Was bedeuted das eigentlich genau?? Wenn das nicht zu Fehlern führt
dann ignorier ichs einfach, weil die Warnungen irgendwann eh
verschwinden.
mfg Michael

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ja nicht geschrieben, daß Du alles "volatile" deklarieren
sollst. ;-)  Das sollte man sowieso nicht blindlings machen, da es
wirklich jede Optimierung auf den so gekennzeichneten Variablen
verhindert.  Ist das wirklich, was Du willst?

Aber ohne auch den Prototypen für uartReceiveByte() zu sehen, kann
man den Fehler nicht nachvollziehen.

Nun, es bedeutet genau das, was da steht: daß Du zwischen zwei
Zeigern mit verschiedenen `qualifiers' hin- und hertransferierst,
die bis auf den qualifier ansonsten zueinander passen.  Qualifier
sind eben const, volatile bzw. neuerdings (C99) auch restricted,
von letzterem wird aber in der avr-libc noch kein Gebrauch gemacht
(und Du wirst es vermutlich auch nicht selbst benutzen ;-).

Übrigens.

uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] );

==

uartReceiveByte( g_rs485data.buffer + g_rs485data.bufferlength );

Autor: miwitt001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ok danke. Jetzt weiß ich wenigstens was das bedeuted, konnte mit dem
Wort qualifier nämlich nix anfangen. Ich denke mal jetzt find ich den
Fehler selber, weiß ja wonach ich suchen muss. Danke für deinen Tipp am
Ende noch, aber das hab ich auch schon ausprobiert aus lauter
Verzweifelung :-)
mfg Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.