PCMan
11.12.2008, 12:31
Hallo Leute,
ich hab da ein Problem mit einem void pointer.
Ich habe ein globales Struct Element. Darin befindet sich ein void Pointer.
Dann gibt es ein zweites globales Struct Element, in dem sich mehrere uint16_t Variablen befinden.
Ich möchte nun während der Laufzeit dem Pointer verschiedene Adressen geben, und zwar die adressen der verschiedenen uint16_t Variablen.
Das funktioniert auch bisher. Ich bekomme allerdings immer die Warnung vom Compiler:
warning: assignment discards qualifiers from pointer target type
Hier vereinfachter Code:
volatile struct
{
void *pvar;
} nav;
volatile struct
{
uint16_t a;
} system;
....
void func()
{
nav.pvar = &system.a; //erzeugt die Warnung
*(uint16_t*) nav.pvar ++; //normale dereferenzierung nach pointer type cast
return;
}
Ich dachte ich müsste bei der Adresszuweisung evtl ebenfalls einen Pointer-Cast ((uint16_t *)nav.pvar = &system.a;) machen, aber das führt dann zu einem error:
error: invalid lvalue in assignment
Ich würde die Warnings gerne wegbekommen, da sie mit sicherheit zu irgendeinem unerklärlichen Verhalten in der Laufzeit führen.
Habt ihr 'ne Idee, was ich da falsch mache?
Viele Grüße,
Simon
ich hab da ein Problem mit einem void pointer.
Ich habe ein globales Struct Element. Darin befindet sich ein void Pointer.
Dann gibt es ein zweites globales Struct Element, in dem sich mehrere uint16_t Variablen befinden.
Ich möchte nun während der Laufzeit dem Pointer verschiedene Adressen geben, und zwar die adressen der verschiedenen uint16_t Variablen.
Das funktioniert auch bisher. Ich bekomme allerdings immer die Warnung vom Compiler:
warning: assignment discards qualifiers from pointer target type
Hier vereinfachter Code:
volatile struct
{
void *pvar;
} nav;
volatile struct
{
uint16_t a;
} system;
....
void func()
{
nav.pvar = &system.a; //erzeugt die Warnung
*(uint16_t*) nav.pvar ++; //normale dereferenzierung nach pointer type cast
return;
}
Ich dachte ich müsste bei der Adresszuweisung evtl ebenfalls einen Pointer-Cast ((uint16_t *)nav.pvar = &system.a;) machen, aber das führt dann zu einem error:
error: invalid lvalue in assignment
Ich würde die Warnings gerne wegbekommen, da sie mit sicherheit zu irgendeinem unerklärlichen Verhalten in der Laufzeit führen.
Habt ihr 'ne Idee, was ich da falsch mache?
Viele Grüße,
Simon