STK500-Besitzer schrieb:
> Philipp Klaus K. schrieb:
>> Hat zwar nichts mit deiner Frage zu tun, aber: Warum verwendest du hier
>> uint8_t? Ich hätte bool für enabled und on verwendet, unsigned int für
>> value.
>
> Bei den meisten Architekturen sind bool nichts anderes als int. Somit
> wäre die struct wesentlich größer.
>
Ein 1-bit Bitfeld vom Typ bool belegt 1 Bit, genau wie ein 1-Bit-Bitfeld
jedes anderen Typs.
> Marko schrieb:
>
1 | > typedef struct attribute ((packed)){
|
2 | > unit8_t enabled :1;
|
3 | > uint8_t on :1;
|
4 | > uint8_t value :8;
|
5 | > }sensor
|
6 | >
|
>
> Du willst am Ende eine 16-Bit-breite struct haben?
> Dann solltest du als "Grundtyp" schon mal (u)int16_t verwendent.
>
1 | > typedef struct attribute ((packed)){
|
2 | > unit16_t enabled :1;
|
3 | > uint16_t on :1;
|
4 | > uint_t value :8;
|
5 | > }sensor
|
6 | >
|
>
> Umd daraus dann noch eine uint16_t-Variable zu machen, verwendet man
> gerne "union".
Der aktuelle C-Standand erlaubt Implementierungen zwar, weitere
Datentypen in Bitfeldern zu unterstützen, aber er verlangt ist nur
Unterstützung für: bool, int, signed int, unsigned int. Bei portablem
Code sollte man sich also auf diese Typen beschränken.