Ich habe ein Bitfeld angegeben, wie unten angegeben.Bitfeld in C kann nicht global initialisiert werden
struct {
volatile uint8_t screenflag:1;
volatile uint8_t logoflag:1;
volatile uint8_t oledflag:1;
volatile uint8_t animationflag:1;
volatile uint8_t clockdialflag:1;
volatile uint8_t update_screen:1;
volatile uint8_t BLE_activity:1;
uint8_t ble_status:1;
} oled_flag;
Aber als ich versuchte, Element von Bitfield out of Main() -Funktion zu initialisieren, zeigt es folgende Fehler beim Kompilieren.
....\Src\main.c(95): warning: #77-D: this declaration has no storage class or type specifier oled_flag.screenflag=1; ....\Src\main.c(95): error: #147: declaration is incompatible with "struct oled_flag" (declared at line 92)
oled_flag.screenflag=1; ....\Src\main.c(95): error: #65: expected a ";" oled_flag.screenflag=1; ....\Src\main.c(96): warning: #77-D: this declaration has no storage class or type specifier
oled_flag.logoflag=0; ....\Src\main.c(96): error: #147: declaration is incompatible with "struct oled_flag" (declared at line 95) oled_flag.logoflag=0; ....\Src\main.c(96): error: #65: expected a ";" oled_flag.logoflag=0; ....\Src\main.c(97): warning:77-D: this declaration has no storage class or type specifier oled_flag.oledflag=1; ....\Src\main.c(97): error: #147: declaration
is incompatible with "struct oled_flag" (declared at line 96) oled_flag.oledflag=1; ....\Src\main.c(97): error: #65: expected a ";" oled_flag.oledflag=1; ....\Src\main.c(98): warning:
77-D: this declaration has no storage class or type specifier oled_flag.animationflag=0; ....\Src\main.c(98): error: #147:
declaration is incompatible with "struct oled_flag" (declared at line 97) oled_flag.animationflag=0; ....\Src\main.c(98): error: #65: expected a ";"
oled_flag.animationflag=0; ....\Src\main.c(99): warning: #77-D: this declaration has no storage class or type specifier
oled_flag.clockdialflag=1; ....\Src\main.c(99): error: #147: declaration is incompatible with "struct oled_flag" (declared at line 98) oled_flag.clockdialflag=1; ....\Src\main.c(99): error: #65: expected a ";"
oled_flag.clockdialflag=1; ....\Src\main.c(100): warning: #77-D: this declaration has no storage class or type specifier
etc ..
Der Initialisierungscode ist:
oled_flag.screenflag=1;
oled_flag.logoflag=0;
oled_flag.oledflag=1;
oled_flag.animationflag=0;
oled_flag.clockdialflag=1;
oled_flag.update_screen=0;
oled_flag.BLE_activity=0;
oled_flag.ble_status=1;
Aber wenn ich Elemente von Bit-Feld in Main() Funktion initialisieren, es funktioniert gut.
'Ein Mitglied, das nicht ein bisschen darstellen DOES Feld kann von jedem Datentyp sein und kann das flüchtige oder const Qualifikationsmerkmal haben. – sjsam
Also was ist eigentlich "oled_flag"? –
Folgender Kommentar # 1 Ich frage mich, warum dein Compiler sich nicht darüber beschwert hat? Oder ist es schlau genug, es zu vernachlässigen? – sjsam