<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-2"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><title>Re: pole bitového pole v C</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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 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";
        color:black;}
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";
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"Formátovaný v HTML Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Text bubliny Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:black;}
span.StylE-mailovZprvy18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.FormtovanvHTMLChar
        {mso-style-name:"Formátovaný v HTML Char";
        mso-style-priority:99;
        mso-style-link:"Formátovaný v HTML";
        font-family:"Consolas","serif";
        color:black;}
span.StylE-mailovZprvy21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.TextbublinyChar
        {mso-style-name:"Text bubliny Char";
        mso-style-priority:99;
        mso-style-link:"Text bubliny";
        font-family:"Tahoma","sans-serif";
        color:black;}
.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]--></head><body bgcolor=white lang=CS link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Už mě něco napadlo, tak to večer nasmolím a můžeme to tady prodiskutovat. Jedná se mi o samo sebou o pice. Nejdřív jsem tam dal 18f1320, pak mi došla paměť, tak jsem to přefoukl na 18f1330 no a teď se blížím ke konci pamětí, tak to optimalizuji. Např. jsem zjistil, je switch pro hi-tech pro 9,80 je podstatně delší než if. Překopal jsem celý program a ušetřil cca200b, což je teda dost. Říkám si, že to že jsem dřív dělal v&nbsp;asm je mi teď na obtíž (úplné začátky na 64kB na ATARI, tam se šetřiloooo), protože každou chvíli koukám do asm a snažím se optimalizovat C, aby to sesmolil co nejkratší v&nbsp;asm. Ale docela se daří. Co se mi však nikdy nepodařilo, přimět C, aby vytvořil klasickou tabulku s&nbsp;retlw konst.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Míra<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</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";color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'> hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] <b>On Behalf Of </b>Jaroslav Buchta<br><b>Sent:</b> Saturday, January 12, 2013 2:50 PM<br><b>To:</b> HW-news<br><b>Subject:</b> Re: pole bitového pole v C<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>Ja na tyto ucely pouzivam funkci a tabulku s prevodni funkci (neco ve smyslu idx1 -&gt; idx2) Prehledne a snadno modifikovatelne.<br><br><br>Dne 12.1.2013 14:17, Miroslav Draxal napsal(a):<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>No já to vlastně tuši, někde jsem to kdysi četl, možná i tady. Ale raději jsem se zeptal. Nevíte někdo o nějakém vzorovém příkladu jak &nbsp;to elegantně řesit ?</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Nechce se mi dělat</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp; switch (CisloMagnetu.bits.CisloBitu)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp; {</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp; case 1:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (CisloMagnetu.bits.SetClr)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SPIout_bity.bitOut.Mag1 = 1;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SPIout_bity.bitOut.Mag1 = 0;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp; case 2:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (CisloMagnetu.bits.SetClr)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SPIout_bity.bitOut.Mag2 = 1;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SPIout_bity.bitOut.Mag3 = 0;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp; case 3:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>atd</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>}</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>je to vlastně pole char[3], chtěl bych napsat něco univerzálního, kde bych zadal ukazatel na počátek pole, jaký bit nastavit např.14.</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Nějak mě nenapadá žádný elegantní způsob. Ale zase, někde jsem to někde viděl v&nbsp;asm pro PIC. Míra </span><o:p></o:p></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 href="mailto:hw-list-bounces@list.hw.cz">hw-list-bounces@list.hw.cz</a> [<a href="mailto:hw-list-bounces@list.hw.cz">mailto:hw-list-bounces@list.hw.cz</a>] <b>On Behalf Of </b>Jan Waclawek<br><b>Sent:</b> Saturday, January 12, 2013 12:08 PM<br><b>To:</b> HW-news<br><b>Subject:</b> Re: pole bitového pole v C</span><o:p></o:p></p></div></div><p class=MsoNormal>&nbsp;<o:p></o:p></p><p><span style='font-size:10.0pt'>&gt; &gt; SPIout_bity. PoleBitu[2]=1; //nastav 3 bit v 23bitovém poli.<br><br>Kratka odpoved je, ze to nejde a musite si najst ine, &quot;manualne&quot; riesenie (napr. pouzivat shifty a masky).<br><br>Teraz ta dlha odpoved :-):<br><br>&gt; To IMHO nejde.<br><br>Ano, to nejde; dovodov je viacero a vsetky su principialne. Jeden je, ze bitove pole ma predpisanu syntax a tam ziadne miesto pre [] nie je; druha je, ze bitove pole nie je &quot;objekt&quot;, t.j. nema adresu (neda sa na neho aplikovat operator &amp;); tretia je, ze v C polia neexistuju, a ta syntakticka finta ze identifikator z deklaracie pola sa interpretuje ako smernik (a nasledne pouzitie a[b] sa priamo konvertuje na *(a + b) kvoli predchadzajucej vlastnosti nemoze fungovat.<br><br>Mimochodom, toto je uvedene aj priamo v standarde, v C99 v poznamke 106 k 6.7.2.1#8.<br><br>&gt; Ani nevim, jestli je normou dane poradi bitu v tech<br><br>Nie je, a toto je znova priamo uvedene v 6.7.2.1#10.<br>Naviac, podla toho isteho odstavca, sa moze prekladac volne rozhodnut, ci sa bude jednotlive bitove polia snazit pchat jeden za druhy, alebo ich rozhadze kazdy do jedneho byte ci dokonca vacsieho kusu pamate.<br><br>&gt; promennych uchar (a spis tusim, ze to je standardne narvane do typu int)<br><br>Ako som hore uviedol, prekladac sa moze sam rozhodnut, ako bitove polie ulozi, a to bez ohladu na deklarovany typ. 6.7.2.1 v principe povoluje akykolvek typ. Dokonca jednym z problematickych bodov je aj benevolentnost normy s ohladom na znamienkovost bitoveho pola, ak je predpisanym typom int bez explicitneho signed alebo unsigned - vid napr. &quot;nadherny&quot; priklad 3 v 6.7.7#6...<br><br>Bohuzial, aj ked zakladna uloha normy ako takej je dosiahnut jednotne spravanie prekladacov a tym co najvacsiu prenositelnost; postoj normovacej komisie v podstate od zaciatku je ten, ze zmeny v norme maju zachovavat exitujuce spravanie co najvacsieho poctu prekladacov (ktore si vzdy robia nejake vlastne rozsirenia co su vlastne zakladnym podnetom pre rozsirovanie normy), a preto sa castokrat zrodili a stale rodia kompromisy ktore v podstate skodia prenositelnosti...<br><br>&gt; Ja uz jsem natolik zdegenerovany, ze pro typ BOOL pouzivam klasicky po<br>&gt; windowsovsku: typedef unsigned char BOOL;&nbsp; ;-)<br><br>C99 definuje _Bool ako jeden zo zakladnych typov (mimochodom je to celociselny typ). Dalej standardna hlavicka &lt;stdbool.h&gt; obsahuje makro bool pre tento isty ucel (7.16#2); pokial viem, bool je zakladny typ v C++. Ak len neplanujete prekladat Vas program v buducnosti nejakym obskurnym prekladacom, nevidim prilis dovod preco sa nedrzat tychto standardnych typov.<br><br>Zdalo by sa, ze ak existuje typ, ktory je urceny na ulozenie jednobitovej hodnoty, tak prekladace (aspon tie pre 8-bitove mcu/mpu) budu mat tendenciu ich ukladat efektivne do jedneho bitu pamate, Bohuzial, nepoznam prekladac, co by to tak robil; naviac pred par rokmi sme v ramci SDCC diskutovali, ci to je vobec mozne, a zda sa, ze norma tomu - mozno nechtiac, mozno nasledkom implementacie niekolkych nesuvisiacich poziadaviek - defacto brani kombinaciou niekolkych formalnych poziadaviek.<br><br>Spomenuty typ sbit pouzivany prekladacmi pre '51 vychadza, tak ako pan kolega Andel povedal, z faktu, ze '51 ma implementovanych 128 bitov bitovo adresovatelnej pamati (to je 16 byte na bytovych adresach 20h-2fh). Na tejto pamati sa dokonca daju robit aj urcite logicke operacie. Premenne typu sbit takto umoznuju vyuzivat tieto instrukcie priamo programom v C. Na druhej strane vsak vsetky instrukcie pracujuce s touto pamatou maju priamu adresaciu, t.j. adresu operandu je nutne poznat v case prekladu. Aj ked nie je nemozne programom toto obist (t.j. z adresy znamej len pocas behu programu vypocitat adresu bytu v ktorom je bit ulozeny a manipulovat tento byte), nema to prilis velky vyznam a bolo by to zbytocne pracne, takze to implementovane pokial viem v ziadnom prekladaci nie je; co okrem ineho znamena, ze na premenne typu sbit nie je mozne pouzit operator &amp; a tym padom ani nie je mozne ich ukladat do pola.<br><br>wek<br>_______________________________________________<br>HW-list mailing list&nbsp; -&nbsp; sponsored by <a href="http://www.HW.cz">www.HW.cz</a><br><a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br><a 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 7886 (20130112) __________<br><br>Tuto zpravu proveril ESET NOD32 Antivirus.<br><br><a href="http://www.eset.cz">http://www.eset.cz</a><o:p></o:p></p><p class=MsoNormal><br><br>__________ Informace od ESET NOD32 Antivirus, verze databaze 7886 (20130112) __________<br><br>Tuto zpravu proveril ESET NOD32 Antivirus.<br><br><a href="http://www.eset.cz">http://www.eset.cz</a><br><br><br><br><o:p></o:p></p><pre>_______________________________________________<o:p></o:p></pre><pre>HW-list mailing list  -  sponsored by <a href="http://www.HW.cz">www.HW.cz</a><o:p></o:p></pre><pre><a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><o:p></o:p></pre><pre><a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><o:p></o:p></pre></blockquote><p class=MsoNormal><br><br><br>__________ Informace od ESET NOD32 Antivirus, verze databaze 7886 (20130112) __________<br><br>Tuto zpravu proveril ESET NOD32 Antivirus.<br><br><a 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 7886 (20130112) __________<BR>
<BR>
Tuto zpravu proveril ESET NOD32 Antivirus.<BR>
<BR>
<A HREF="http://www.eset.cz">http://www.eset.cz</A><BR>


 </body></html>