Embitz / STM32F Frage

OP #6052700
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 ?
#6052882
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren