<html>
<head>
<meta content="text/html; charset=ISO-8859-2"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Nevim jak s bitovymi poli ale union pro
pristyp BYTE, WORD, DWORD... se vidi celkem bezne, da se to
osetrit ruznumi makry ALIGN.... xxxENDIAN... aby to bylo
univerzalne prenositelne a je to OK. Zas takovy bordel v ruznych
implementacich neni a funguje to celkem stabilne (bitova pole by
se taky mela postupne umistovat do standardniho typu (int) od LSB
ve vsech implementacich, ne? )<br>
<br>
Dne 27. 4. 2013 18:48, Miroslav Draxal napsal(a):<br>
</div>
<blockquote cite="mid:001201ce4367$0e2d5ef0$2a881cd0$@cz"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-2">
<meta name="Generator" content="Microsoft Word 12 (filtered
medium)">
<title>Re: C _ jak rozepsat řádek</title>
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.StylE-mailovZprvy18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Díky,
tohle funguje,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">
Na štábní kultuře zapracuji, v tomto projektu již nechám
sprasenou. <o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">S těmi
ukazateli mam vždy problém, že nějak neumím najít systém,
odkud ten řádek mám začít číst. I za 10 let v tom budu
plavat. <o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a class="moz-txt-link-abbreviated" href="mailto:hw-list-bounces@list.hw.cz">hw-list-bounces@list.hw.cz</a>
[<a class="moz-txt-link-freetext" href="mailto:hw-list-bounces@list.hw.cz">mailto:hw-list-bounces@list.hw.cz</a>] <b>On Behalf Of </b>Josef
Štengl<br>
<b>Sent:</b> Saturday, April 27, 2013 2:26 PM<br>
<b>To:</b> HW-news<br>
<b>Subject:</b> Re: C _ jak rozepsat řádek<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p><span style="font-size:10.0pt">On v nich trošku plave skoro
každý :-)<br>
<br>
To jak máte napsáno „// tohle je OK“, tak to je v pořádku
protože<br>
pracujete s ukazatelem na strukturu, kterou derefenrecujete
a<br>
přistupujete k ní jako ke struktuře resp. přímo k položce
struktury. Ten<br>
typ položky je důležitý, protože položky nazvané Bit[0-7]
jsou položky<br>
bitového pole, a položka bitového pole nemá adresu, takže na
něj nelze<br>
vytvořit ukazatel. Viz pozn. 106 dokumentu n1256: (C99
draft)<br>
<br>
The unary & (address-of) operator cannot be applied to a
bit-field<br>
object; thus, there are no pointers to or arrays of
bit-field objects.<br>
<br>
Takže se pak přes ukazatel snažíte získat adresu položky
pole, která je<br>
ovšem položka bitového pole a ten nemá adresu a skončí to
chybou.<br>
<br>
Dále jen poznámky pod čarou. Pokud vás rozčílí, tak si jich
nevšímejte:<br>
<br>
Název unionu začíná podtržítkem, což má jazyk C rezervovaný
pro budoucí<br>
použití. Podtržítka na začátku čehokoliv v aplikačních
programech<br>
nepoužívat!<br>
<br>
Zvážil bych použití bitového pole ve stylu<br>
<br>
<a moz-do-not-send="true"
href="http://c-faq.com/misc/bitsets.html">http://c-faq.com/misc/bitsets.html</a><br>
<br>
Jen k tomu mám poznámku, že char by měl být unsigned char,
protože by se<br>
neměly provádět bitové operace na znaménkových typech. Ve
velmi<br>
speciálních případech dostáváme zajímavě nesprávné výsledky.<br>
<br>
Vypadá to, že se snažíte mít různý přístup k jednomu místu v
paměti s<br>
využitím typu union. To je z hlediska specifikace C chybně,
protože jak<br>
se ukládají data v položce union je jen a pouze záležitost
překladače a<br>
jinde by to nemuselo fungovat správně (dobrá, to že jsem se
s tím ještě<br>
nesetkal, neznamená že se to prohlásí za standard. Aby to
pak nedopadlo<br>
jak s tím raketoplánem co vybouchl :-)<br>
<br>
Pro mě je to příklad toho jak by se to psát nemělo. Jestli
mi do toho<br>
nic není, tak si toho nevšímejte :-D.<br>
<br>
Hmm než jsem to dopsal, tak toto od pana Augustýna by mohlo
fungovat.<br>
<br>
(*pProgEEpr).EndProgram = 1;<br>
<br>
Protože se nejprve provede dereference ukazatele na
strukturu a pak se<br>
přistupuje k položce.<br>
<br>
Hezký den.<br>
<br>
<br>
Dne 27.4.2013 12:18, Miroslav Draxal napsal(a):<br>
> Dobrý den<br>
><br>
> Mějme<br>
><br>
> char MenuPolozkaSet;<br>
><br>
> typedef union {<br>
><br>
> char value;<br>
><br>
> struct {<br>
><br>
> unsigned Bit0 : 1;<br>
><br>
> unsigned Bit1 : 1;<br>
><br>
> unsigned Bit2 : 1;<br>
><br>
> unsigned Bit3 : 1;<br>
><br>
> unsigned Bit4 : 1;<br>
><br>
> unsigned Bit5 : 1;<br>
><br>
> unsigned Bit6 : 1;<br>
><br>
> unsigned Bit7 : 1;<br>
><br>
> } Bits;<br>
><br>
> struct {<br>
><br>
> unsigned val : 7;<br>
><br>
> unsigned bit_ : 1;<br>
><br>
> } ProlnutiPauza;<br>
><br>
> struct {<br>
><br>
> unsigned Mesic : 5;<br>
><br>
> unsigned AutoOnOff : 1;<br>
><br>
> unsigned EndProgram : 1;<br>
><br>
> };<br>
><br>
> } _ProgramEEprom;<br>
><br>
> (*((_ProgramEEprom*) & MenuPolozkaSet)).EndProgram
= 1; // tohle je OK<br>
><br>
> Pokud bych to chtěl rozepsat přes fyzický ukazatel<br>
><br>
> _ProgramEEprom *pProgEEpr = (_ProgramEEprom*)
&MenuPolozkaSet;<br>
><br>
> *pProgEEpr.EndProgram = 1;<br>
><br>
> To hází chybu<br>
><br>
> MenuKey.c:261: error: struct/union required<br>
><br>
> MenuKey.c:261: error: illegal conversion between types<br>
><br>
> Což asi chápu, ale jak to napsat. Snažím se tomu přijít
na kloub. V těch<br>
> pointerech plavu.<br>
><br>
><br>
><br>
> __________ Informace od ESET NOD32 Antivirus, verze
databaze 8272<br>
> (20130426) __________<br>
><br>
> Tuto zpravu proveril ESET NOD32 Antivirus.<br>
><br>
> <a moz-do-not-send="true" href="http://www.eset.cz">http://www.eset.cz</a><br>
><br>
><br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by <a
moz-do-not-send="true" href="http://www.HW.cz">www.HW.cz</a><br>
> <a moz-do-not-send="true"
href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
> <a moz-do-not-send="true"
href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a
moz-do-not-send="true" href="http://www.HW.cz">www.HW.cz</a><br>
<a moz-do-not-send="true" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a moz-do-not-send="true"
href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></span><o:p></o:p></p>
<p class="MsoNormal"><br>
<br>
__________ Informace od ESET NOD32 Antivirus, verze databaze
8272 (20130426) __________<br>
<br>
Tuto zpravu proveril ESET NOD32 Antivirus.<br>
<br>
<a moz-do-not-send="true" href="http://www.eset.cz">http://www.eset.cz</a><o:p></o:p></p>
</div>
<br>
<br>
__________ Informace od ESET NOD32 Antivirus, verze databaze 8272
(20130426) __________<br>
<br>
Tuto zpravu proveril ESET NOD32 Antivirus.<br>
<br>
<a moz-do-not-send="true" href="http://www.eset.cz">http://www.eset.cz</a><br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
</body>
</html>