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.

: Bearbeitet durch User
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.