<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">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):<br>
    </div>
    <blockquote cite="mid:000c01cdf0c7$2ff361d0$8fda2570$@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: 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;}
/* 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:&quot;Calibri&quot;,&quot;sans-serif&quot;;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  to elegantně řesit ?<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Nechce
            se mi dělat<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"> 
            switch (CisloMagnetu.bits.CisloBitu)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">   
            {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">   
            case 1:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            if (CisloMagnetu.bits.SetClr)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
                SPIout_bity.bitOut.Mag1 = 1;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            else<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
                SPIout_bity.bitOut.Mag1 = 0;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">   
            case 2:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            if (CisloMagnetu.bits.SetClr)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
                SPIout_bity.bitOut.Mag2 = 1;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            else<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
                SPIout_bity.bitOut.Mag3 = 0;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">              
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">   
            case 3:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">atd<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">}<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;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.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Nějak
            mě nenapadá žádný elegantní způsob. Ale zase, někde jsem to
            někde viděl v asm pro PIC. Míra <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:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span
style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">
                <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>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<o:p></o:p></span></p>
          </div>
        </div>
        <p class="MsoNormal"><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,
            "manualne" 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
            "objekt", 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.
            "nadherny" 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;  ;-)<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  -  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
          7886 (20130112) __________<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 7886
      (20130112) __________<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>