Frage zu Union
-
Hallo,
kann mir einer erklären wie Unions im Speicher funktionieren?
Da werden ja die einzelnen Komponenten im gegensatz zu der Struktur "übereinander" gelegt.Schön und gut, aber wie klappt soetwas im Speicher. Man kann ja nicht auf die gleiche Adresse mehrere Komponenten "legen".
Danke
-
Stell dir ein Union vor wie verschiedene "Sichten" auf ein und den selben Speicherbereich.
union { int i; float f; };
Wenn ich auf "i" zugreife, wird das Bitmuster, das an der Adresse des Unions liegt, als int interpretiert, wenn ich auf f zugreife, wird es als "f" interpretiert.
-
JDHawk schrieb:
Man kann ja nicht auf die gleiche Adresse mehrere Komponenten "legen".
doch, genau so wirds gemacht. deshalb verändert man auch alle anderen 'komponenten', wenn man eine überschreibt.
-
Danke euch beiden.
Habe nämlich hier ein interessantes Bespiel.
Man möchte das eine Struktur unbedingt 32bit groß ist. Dann erstellt man eine Union erster Parameter ist ein uint32, und die nächsten zwei sind uint 8. Trotzdem ist die gesamte Struktur (oder hier halt Union) immer 32 Bit groß.Anwendung: in der Memory Map Definition eines Mikrocontrollers.
Eine andere Frage noch: Was bedeuten die Doppelpunkte nach den Komponente dieser Struktur?
struct { vuint16_t R8:1; vuint16_t T8:1; vuint16_t:6; vuint8_t D; } B;
-
Alles klar,
Das sind Bitfelder. Somit nehmen die ersten 2 Komontenten jeweils 1 Bit ein und die 3. Komponente 6 Bit. Insgesamt ist die Struktur 16 Bit groß, trotz der Datentypen!