mikrocontroller.net

Forum: Compiler & IDEs Embitz / STM32F Frage


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ralf F. (dg2drf)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.