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 ?
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.