C bitmezo kerdes
Papp Zoltán
zombi at c2.hu
Sat Nov 10 00:33:55 CET 2007
> ----- Original Message -----
> From: "Fuzesi Arnold" <arnold.fuzesi.lista at gmail.com>
>
> Sziasztok!
>
> uint a:1
> uint b:2
> uint c:5
> uint d:1
> uchar helo
> uchar belo
> uint f:1
> uint g:1
>
> bitmezo eseten az "a,b,c,d" valtozokat egy uint-be teszi, majd két uchar
> valtozo majd ujabb uint-be az "f,g", vagy az előző uint-ben ha van szabad
> hely, akkor oda teszi az "f,g"-t?
>
> Szabvany mit mond erre?
>
> A.
A szabványt sajna én sem tudom, de "IAR C for AVR"-ben csak "struct"-ban
működik a bitmező, így:
struct
{
unsigned char
fInMenuPoint:1,
fCounterRun:1,
fBreakMode:1,
fKeyPush:1,
fRefresh:1,
fLedA:1,
fError:1;
};
Így viszont neked kell látnod, hogy beleférnek-e az adat-típusba a bitek.
(itt fent igen)
Ha pl. ilyet csinálok:
struct
{
unsigned char
b0 : 5,
b1 : 5,
b2 : 5;
};
Akkor ezt 3 külön char-ba rakja, de nem szól semmit, csak a generált-lista
fájlban látom, hogy 3 bájtot foglalt le.
Azaz automatikusan úgy pakolja, hogy ha a köv. bitmező nem fér bele az
aktuális bájtba, akkor következőt kezd.
Pl.:
struct
{
unsigned char
b0 : 4,
b1 : 6,
b2 : 4,
b3 : 2;
};
Ehhez 3 bájtot foglal le, de ha átvariálom:
struct
{
unsigned char
b0 : 4,
b2 : 4,
b1 : 6,
b3 : 2;
};
Akkor már csak 2-t!
Üdv
u.i.:folyt köv.
--
Papp Zoltán
OneWay Electronics - www.onewayelectronics.hu
Hangszerviz - www.hangszerviz.hu
More information about the Elektro
mailing list