pole bitového pole v C

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Sobota Leden 12 22:17:27 CET 2013


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):
> Re: pole bitového pole v C
>
> 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>
>     [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 bywww.HW.cz  <http://www.HW.cz>
>
>     Hw-list na list.hw.cz  <mailto: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

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


Další informace o konferenci Hw-list