Forum: Compiler & IDEs Warum: "warning: assignment discards qualifiers from pointer target type"?


von Brad (Gast)


Lesenswert?

Hallo,

warum bekomme ich folgende Warnung:

../Bus.c:200: warning: assignment discards qualifiers from pointer 
target type


bei dieser Zuweisung:

busBuffer.msgPtr = busBuffer.msg;


busBuffer ist wie folgt definiert:

typedef struct
{
uint8_t busy;    // Flag, not ready for read or sent
uint8_t gotCmd; // Flag, received a command since last change of SEL
uint8_t wait;  // Flag, master shall wait
uint8_t msgBytes;// Bytes received
uint8_t dataBytes;// Bytes to be read
uint8_t *msgPtr; // Pointer to byte to transmit or to read
uint8_t msg[ BUSBUFFER_MSG_LEN ];
} BusBuffer_t;

static volatile BusBuffer_t busBuffer;

Am volatile scheint es nicht zu liegen, denn bei

busBuffer.msgPtr = (uint8_t*) busBuffer.msg;

ist der Compiler ruhig!?!

Plattform ist AVRStudio mit aktuellem WinAVR.

Grüsse
Brad

von Karl H. (kbuchegg)


Lesenswert?

Brad wrote:
>
> Am volatile scheint es nicht zu liegen, denn bei
>

Doch.

> busBuffer.msgPtr = (uint8_t*) busBuffer.msg;
>
> ist der Compiler ruhig!?!

Ja, klar. Hier castest du ja das volatile ja auch explizit weg.

1
static volatile BusBuffer_t busBuffer;

Die ganze Struktur, jeder einzelne Member, ist hier volatile. Auch das 
komplette Array busBuffer.msg ist volatile.
Aber dein Pointer msgPtr zeigt nicht auf einen uint8_t der volatile ist.
1
  ...
2
  volatile uint8_t *msgPtr;
3
  ...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Brad (Gast)


Lesenswert?

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.