Forum: Compiler & IDEs Embitz / STM32F Frage


von Ralf F. (dg2drf)


Lesenswert?

Ich habe mich nach längerer Pause mal wieder ent6schlossen was zu 
programmieren.

Das Speichern einer Configuration möchte über g_bt_data machen:

static char g_bt_data[27]   = {0};
const char *BT_SSID[20]     = &g_bt_data[0];
uint32_t *BT_PIN            = &g_bt_data[20];                //0
uint32_t *BT_Baud           = &g_bt_data[23];

beim Compilieren bekomme ich folgende Warnungen:

 error: invalid initializer
 const char *BT_SSID[20]         = &g_bt_data[0];

 warning: initialization from incompatible pointer type 
[-Wincompatible-pointer-types]
 uint32_t *BT_PIN            = &g_bt_data[20];                //0
                               ^
warning: initialization from incompatible pointer type 
[-Wincompatible-pointer-types]
 uint32_t *BT_Baud           = &g_bt_data[23];


kann mir jemand auf die Sprünge helfen ?

von Christopher J. (christopher_j23)


Lesenswert?

Du weist einem uint32_t* einen static char* zu und der Compiler warnt, 
dass diese beiden Pointer von unterschiedlichem Typ sind. Um die Warnung 
zu eliminieren musst du einen expliziten Type-Cast durchführen.
In jedem Fall musst du aber auf korrektes Alignment von deinem uint32_t 
in deinem static char[] achten, weil es sonst bei der Dereferenzierung 
des Pointers zum Crash kommt.

PS: Es muss natürlich nicht nur der uint32_t innerhalb des char[] 
aligned sein, sondern natürlich das char[] selbst ebenfalls, damit es 
sicher passt. Kurzum: Ein uint32_t muss immer auf vier Bytes aligned 
sein.

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.