Zitat Zitat von Felix G
Bei solchen Problemen heisst das Zauberwort: "union"

Hier mal ein Beispiel:
Code:
typedef union
{
	uint16_t Raw;

	struct
	{
		uint16_t Command : 6;
		uint16_t Address : 5;
		uint16_t Toggle  : 1;
		uint16_t Field   : 1;
		uint16_t Start   : 1;
	} Structured;
} type_RC5_Frame;
In diesem Fall kann auf den gleichen Speicherbereich wahlweise per "Structured" als Bitfeld, oder aber per "Raw" an einem Stück zugegriffen werden
bei einem struct von bitfeldern kann der compiler im prinzip jedes bitfeld in einem eigenen word oder an beliebiger stelle speichern. greift man dann über ein union darauf zu, hat man keine controlle über die position der bitfelder. union garantiert nur, dass jeweils platz vorhanden ist für die daten die man ablegen will. dabei hat man keine garantie für die position.

das kann natürlich trotzdem funktionieren, da compiler ja kein interesse daran haben, die dinge unnötig kompliziert zu machen. aber verlassen würde ich mich darauf nicht

ich würde mir auf jeden fall mal die optimierungsoptionen des compilers anschauen.

sicherer ist es vermutlich, über eigene masken auf bitfelder in einem uint16_t zuzugreifen.