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