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