Was ist Bitfeld?

Mechanismus in C, mit dem ein Member einer Struktur als Feld mit einer angegebenen Bitzahl deklariert wird, etwa unsigned int x : 3;. Da sich kleine Werte dicht gepackt halten lassen, fasst man damit Flags und Einstellwerte zusammen. Ein Wert, der nicht in ein vorzeichenloses Feld passt, wird zum Rest der Division durch 2 hoch Bitzahl. Ob die Felder vom oberen oder unteren Ende eines Worts an angeordnet werden und ob ein Feld eine Grenze überschreiten darf, kann je nach Implementierung verschieden sein; für Peripherieregister und Kommunikationsformate schreibt man daher oft Masken und Shifts.

Japanische Bezeichnung: ビットフィールド

„Bitfeld“ kommt in 2 Übungsfragen aus 2 Themen vor, z. B. Embedded Systems und Firmware, Grundlagen der Programmiersprache C.

Fachgebiet: Grundlagen der Programmiersprache C

Jetzt üben: Fragen zu Bitfeld

Worauf ist zu achten, wenn Peripherieregister in C mit einer Struktur aus Bitfeldern dargestellt werden?

  1. AMit Bitfeldern wird das Programm stets doppelt so schnell
  2. BDie Bitreihenfolge von Bitfeldern darf je nach Compiler verschieden sein, sodass mit einem anderen Compiler unbeabsichtigt andere Bits bearbeitet werden können
  3. CBitfelder können keine Werte mit 8 Bit oder mehr darstellen
Antwort und Erläuterung anzeigen

Antwort: B. Die Bitreihenfolge von Bitfeldern darf je nach Compiler verschieden sein, sodass mit einem anderen Compiler unbeabsichtigt andere Bits bearbeitet werden können

Bitfelder sind gut lesbar, doch im C-Standard bleibt der Implementierung überlassen, ob Bits in einer Struktur von oben oder von unten angeordnet werden, wie Felder über Grenzen hinweg behandelt werden und wie breit der Zugriff ist. Daher kann Code, der mit einem Compiler korrekt läuft, mit einem anderen Compiler oder einer anderen CPU andere Bits lesen oder schreiben. Von Mikrocontroller-Herstellern bereitgestellte Header sind häufig mit Masken und Shifts geschrieben.

„Bitfeld“ in den Erläuterungen

Fragen mit „Bitfeld“ (2)

  1. Worauf ist zu achten, wenn Peripherieregister in C mit einer Struktur aus Bitfeldern dargestellt werden?
  2. Welche Ausgabe erzeugt der obige Code, der 9 in ein 3-Bit-Bitfeld schreibt, bei der Ausführung?

Verwandte Begriffe

Mikrocontroller Ausrichtung und Auffüllung (Alignment und Padding) Dangling Pointer (hängender Zeiger) Dynamische Speicherreservierung Funktionszeiger Integer-Promotion Makro Präprozessor Pufferüberlauf (Buffer Overflow) Speicherleck (Memory Leak)

Zur Glossarübersicht