RE: pole bitového pole v C

Miroslav Draxal evik na volny.cz
Sobota Leden 12 22:31:29 CET 2013


Nechám to tak. Ale ty 3bytiky co by se daly ušetřit mě fakt drásají. L

Díky.

 

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
Behalf Of Jaroslav Buchta
Sent: Saturday, January 12, 2013 10:17 PM
To: HW-news
Subject: Re: pole bitového pole v C

 

To takhle asi nepujde. Asi by bylo cestou definovat lokalni promennou typu
_SetBitPole, inicializovat a pouzit, rozumny prekladac to zoptimalizuje a
pouzije jen registr a bude to OK.
Abych rekl pravdu, ja bych takove slozite konstrukce nepouzival a bud pouzil
ve funkci 2 parametry nebo jeden a nejaka makra na slozeni hodnot do
parametru skrz posuvy a bitove OR. V C++ by to bylo jine kafe, ale u MCU s
klasickym C je to IMHO trosku kanon na vrabce.

Dne 12.1.2013 22:11, Miroslav Draxal napsal(a):

Vlastně obklikou to dělám takhle

                                  tmp.value = (24 - CisloSekce) | 0x40;

                                  VentilSet (tmp);

 

Chtěl bych

    VentilSet ((24 - CisloSekce) | 0x40);

 

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
Behalf Of Jaroslav Buchta
Sent: Saturday, January 12, 2013 9:44 PM
To: HW-news
Subject: Re: pole bitového pole v C

 

Ja proste na tyhle prevody jdu pres ukazatele, takze bych to udelal zase
takhle (nezkouseno)

VentilSet (*((_SetBitPole*)&TMP));

Proste se vezme adresa promenne TMP operatorem &, ukazatel na cokoli  jde
pretypovat na ukazatel na cokoli jineho, cili i na union a pak se operatorem
dereference * zase ziska objekt na odkazovane adrese (uz pretypovany). Mozna
to jde i jednoduseji, ale ja takhle prevadim i typy z neznaminkovych na
znamenkove, napr. v komunikacnich paketech, kdyz UINT uvnitr obsahuje
hodnotu se znamenkem, napr.: float fTempSecIn =
(float)*(short*)&ProcImgRO.r.tempSecInp100; 


Dne 12.1.2013 21:34, Miroslav Draxal napsal(a):

Hmm, přiznávám, že tomu nehovím, neumím to přečíst. Nic. Ráno se k tomu
vrátím, a budu se to snažit pochopit. Pro dnešek ještě jednu věc.

 

Mějme podprogram

void VentilSet (_SetBitPole CisloVentilu)

 

kde 

typedef union {

    char value;

 

    struct {

               unsigned CisloBitu : 6;

               unsigned SetClr : 1;

    } bits;

} _SetBitPole;

 

Pokud budu mí char TMP

Jak to dostanu do volání toho podprogramu.

 

VentilSet(TMP) 

 

Stále se jedná o 1byt.

Je mi jasné že na začátku vytvořit TMP jako _ SetBitPole

Přetypování char na union nejde. Jak na to? Míra

 

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
Behalf Of Jaroslav Buchta
Sent: Saturday, January 12, 2013 8:27 PM
To: HW-news
Subject: Re: pole bitového pole v C

 

Takhle mi to AVR C sezere: (jeste jsem musel doplnit zavorky)

char byt;

typedef union bytX

{

    char value;

    unsigned bit0 : 1;

}_byt;

int main (void)
{
    
    (*((_byt*)&byt)).bit0 = 1;








__________ Informace od ESET NOD32 Antivirus, verze databaze 7887 (20130112)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz






_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list




__________ Informace od ESET NOD32 Antivirus, verze databaze 7887 (20130112)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz



__________ Informace od ESET NOD32 Antivirus, verze databaze 7887 (20130112)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz





_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list




__________ Informace od ESET NOD32 Antivirus, verze databaze 7887 (20130112)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz



__________ Informace od ESET NOD32 Antivirus, verze databaze 7887 (20130112)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20130112/1e089e56/attachment.htm>


Další informace o konferenci Hw-list