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