<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">No já nemohu říkat, že znám céčko :-)
      protože nepíšu pro PC, ale jen pro malé jednočipy obvykle s malou
      pamětí pro data, zatím co code obvykle zdaleka celé nevyužiju.
      Takže sice vím, že každou blbost bych měl psát zvlášť jako funkci
      a pak ji volat, ale vadí mi že u krátkých funkcí (pár řádků) se
      běh programu prodlouží o volání + návrat z funkce a o uschovávání
      + obnovení obsahu registrů. K tomu ještě se (zbytečně) zaplňuje
      stack a tak v mém programu najdete třeba něco takového</div>
    <div class="moz-cite-prefix"><br>
      ADC0CN0=0x80;                // ADC0 zapnuty<br>
      ADINT=0; <br>
      ADBUSY=1;                        // 1. mereni             <br>
      while(!ADINT);             <br>
      Potenc=ADC0; <br>
      ADC0CN0=0;                    // ADC0 vypnuty<br>
      <br>
      PCON=1;                            // t=1,11 ms  cekani v IDL<br>
      <br>
      ADC0CN0=0x80;                // ADC0 zapnuty<br>
      ADINT=0; <br>
      ADBUSY=1;                        // 2. mereni         <br>
      while(!ADINT);             <br>
      Potenc+=ADC0; <br>
      ADC0CN0=0;                    // ADC0 vypnuty<br>
      <br>
      PCON=1;                            // t=2,22 ms<br>
      <br>
      ADC0CN0=0x80;                // ADC0 zapnuty<br>
      ADINT=0; <br>
      ADBUSY=1;                        // 3. mereni<br>
      while(!ADINT);             <br>
      Potenc+=ADC0; <br>
      ADC0CN0=0;                    // ADC0 vypnuty<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Zrovna tenhle prográmek mi běží s
      oscilátorem 80 KHz a časově je to tam dost na těsno - samosřejmě
      kritická je spotřeba procesoru.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Anděl</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Dne 21.04.2020 v 13:29 Tomáš Hamouz
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:1831465454.20200421132939@divesoft.com">
      <title>Re: Chyba v C - velmi podivné chování</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <span style=" font-family:'Courier New'; font-size: 10pt;">Názvy
        #define jsem použil nějaké, které mě napadly, ale jak jsem psal,
        nevím co původní výraz ve skutečnosti <br>
        vyhodnocuje, podle toho bych použil lepší názvy. Chtěl jsem tím
        naznačit že do vlastního kódu nepatří žádná konstanta, <br>
        která ovlivňuje použitý algoritmus, s několika drobnýma
        výjimkama.<br>
        <br>
        Stejně tak název té funkce nemá vyjadřovat všechny v něm použité
        podmínky, ale k čemu je toto porovnání dobré.<br>
        <br>
        A opět jak jsem psal, možná by bylo lepší porovnání s tou
        trojkou strčit rovnou do té funkce, ale bez znalosti kontextu
        jen hádám.<br>
        <br>
        Je to zcela bez ohledu na firemní kuluru, jak stárnu tak
        používám zcela samovolně čím dál tím delší identifikátory.<br>
        Může to být i tím že se u mne rozmáhá skleróza a už si prostě
        řadu detailů nepamatuju.<br>
        <br>
        Tomáš<br>
        <br>
        <br>
      </span>
      <table>
        <tbody>
          <tr>
            <td width="2" bgcolor="#0000ff"><br>
            </td>
            <td width="1155"><span style=" font-family:'calibri';
                font-size: 11pt;">No jo, ale to pak na místě použití
                není vidět, jaké že ty podmínky jsou. Předpokládám, že
                funkce bude dle firemních pravidel definována v nějakém
                externím souboru. Nedej bože, když takových sad podmínek
                bude víc. To pak budou názvy těch funkcí tak dlouhé, že
                určitě poruší nějaké délkové pravidlo, ohledně délky
                řádku:-)<br>
                 <br>
                Normálně bych pro zvýšení přehlednosti dal mezery okolo
                + (což jsem ale pro zabránění zalomení v mailu
                vynechal). Uvažoval bych ještě o další závorce okolo
                součtu.<br>
                 <br>
                Použití funkce pro mě přehlednost jasně snižuje:-)
                Navíc <span style=" font-family:'courier new';
                  font-size: 10pt;">MIN_A_COUNT a<span style="
                    font-family:'calibri'; font-size: 11pt;"> <span
                      style=" font-family:'courier new'; font-size:
                      10pt;">REMAING_COUNT<span style="
                        font-family:'calibri'; font-size: 11pt;"> jsou
                        vyloženě matoucí názvy pro podmínky
                        nesouvisející s count:-) Jinak teda proti
                        použití define nic nenamítám, běžně používám,
                        ale zas je to zbytečná komplikace do ukázky typu
                        kódu v mailu.<br>
                         <br>
                        K čemu teda máme různé jazyky, když bychom
                        nemohli využívat jejich výhod?<br>
                         <br>
                        PH<br>
                         <br>
                         <br>
                        <b>Od: </b></span></span></span></span></span><a
                style=" font-family:'calibri'; font-size: 11pt;"
                href="mailto:tomas.hamouz@divesoft.com"
                moz-do-not-send="true">Tomáš Hamouz</a><br>
              <span style=" font-family:'courier new'; font-size: 10pt;">Myslím
                že lepší otázka zní, jak to napsat tak aby bylo na první
                pohled jasné co daný výraz vyhodnocuje, <br>
                bez ohledu na počet písmenek.<br>
                <br>
                Abych planě nekritizoval, nejspíš bych to udělal takhle,
                ale protože nevím účel celé konstrukce,<br>
                tak by bylo třeba lepší zahrnout i porovnání s trijkou.
                Podmínku malého počtu písmenek zcela zjevně <br>
                nesplňuju, ale to zcela záměrně, protže bych se v tom
                rád vyznal i po několika letech kdy jsem to neviděl.<br>
                <br>
                <br>
                #define   MIN_A_COUNT               2            //
                vyznam teto konstanty<br>
                #define   REMAING_COUNT       12        // vyznam teto
                konstanty<br>
                #define   MINIMAL_COND_COUNT   3        // vyznam teto
                konstanty<br>
                 <br>
                static inline int count_test_conditions(int a, int b,
                int x, int y) <br>
                {<br>
                    int count = 0;<br>
                    if (a < MIN_A_COUNT) {++count;}        //
                oduvodneni teto podminky<br>
                    if (a > b) {++count;}                  //
                oduvodneni teto podminky<br>
                    if (x < y) {++count;}                  //
                oduvodneni teto podminky<br>
                    if ((a%x) == REMAING_COUNT) {++count;} // oduvodneni
                teto podminky<br>
                    if (b < y) {++count;}                  //
                oduvodneni teto podminky<br>
                    return count;<br>
                }<br>
                <br>
                if (count_test_conditions(a, b, x, y) > 3) {<br>
                }<br>
                <br>
                <br>
                A bylo by docela zajímavé se podívat jak se liší
                zkompilovaný kód v obou případech.<br>
                Myslím že by tam velké rozdíly nebyly.<br>
                <br>
                <br>
              </span>
              <table>
                <tbody>
                  <tr>
                    <td width="2" bgcolor="#0000ff"><br>
                    </td>
                    <td width="1025"><span style="
                        font-family:'calibri'; font-size: 11pt;">Otázka
                        tedy zní, jak ho upravit, aby prošel a přibylo
                        co nejméně písmenek:-)<br>
                         <br>
                        PH<br>
                         <br>
                        <b>Od: </b></span><a style="
                        font-family:'calibri'; font-size: 11pt;"
                        href="mailto:as5sgm@gmail.com"
                        moz-do-not-send="true">as5sgm@gmail.com</a><br>
                      <span style=" font-family:'courier new';
                        font-size: 10pt;">>>> If
                        ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)
                        > 3) {<br>
                        Tento riadok kodu by nepresiel review a ani
                        MISRA rules, vsade kde su aspon dvaja vyvojari
                        :)<br>
                        Miro<br>
                         <br>
                        <span style=" font-family:'calibri'; font-size:
                          11pt;">On 21. 4. 2020 10:37, Pavel Hudecek
                          wrote:<br>
                          Vzhledem ke komutativnosti sčítání by pořadí
                          mělo bejt irelevantní, kromě toho posledního
                          >, ale to má nižší prioritu než +, takže se
                          musí vyhodnotit jako poslední.<br>
                           <br>
                          No a že to nebude fungovat v jiných jazycích?
                          To je snad normální. Nebo všechny mají ++,
                          printf, pointery jako Delphi, nepotřebují
                          deklarovat proměnné jako VB6, … ?<br>
                           <br>
                          Příkazů je tam 0, takže omezení na max. jeden
                          na řádek to taky nepřekračuje.<br>
                           <br>
                          PH<br>
                           <br>
                          <b>Od: </b></span></span><a style="
                        font-family:'calibri'; font-size: 11pt;"
                        href="mailto:a2x1nptda8@email.cz"
                        moz-do-not-send="true">Michal Gregor</a><br>
                      <span style=" font-family:'calibri'; font-size:
                        11pt;">Spravne se maji slozite podminky prevest
                        do funkci. Plati zasada jeden <br>
                        radek jeden prikaz. A nespolehat se na interni
                        "tajne" funkce <br>
                        compilatoru. Co kdyz to nekdo skopiruje do C++?
                        Nebo do uplne jineho jazyja.<br>
                         <br>
                         <br>
                        Dne 21.04.2020 v 8:46 Jan Waclawek napsal(a):<br>
                        > A nemohlo to byt skor o tom, ze v takychto
                        vyrazoch<br>
                        > <br>
                        >>> If
                        ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)
                        > 3) {<br>
                        > <br>
                        > nie je zarucene poradie vyhodnotenia
                        pod-vyrazov, aj keby mali vedlajsie<br>
                        > efekty?<br>
                        > <br>
                        > wek<br>
                        > <br>
                        > <br>
                        > ----- Original Message ---------------<br>
                        >> Sa vam dvom do toho zamontujem, som
                        nieco nasiel vo svojom archive, ale<br>
                        >> Ty si mimo podozreni :)<br>
                        >> Skor si ja pofajcim, ze uz kedy som
                        daval do placu citat z normy, ktory<br>
                        >> si teraz dal aj Ty :-D<br>
                        >> <br>
                        >> </span><a style="
                        font-family:'calibri'; font-size: 11pt;"
                        href="https://list.hw.cz/pipermail/hw-list/2011-July/399004.html"
                        moz-do-not-send="true">https://list.hw.cz/pipermail/hw-list/2011-July/399004.html</a><br>
                      <span style=" font-family:'calibri'; font-size:
                        11pt;">>> <br>
                        >> miro<br>
                        >> <br>
                        >> On 21.4.2020 1:17, Jan Waclawek wrote:<br>
                        >>> Hm, tak ja vidim vyhody skor v tych
                        6 ifoch a 1 pomocnej premennej...<br>
                        >>> <br>
                        >>> Ale ak by si nahodou nasiel odkaz,
                        kde ten JW z minulosti povedal, ze<br>
                        >>> vysledkom podmienky nemusi byt 0
                        alebo 1, tak by som Ti bol vdacny.<br>
                        >>> <br>
                        >>> wek<br>
                        >>> <br>
                        >>> <br>
                        >>> ----- Original Message
                        ---------------<br>
                        >>> Tak?e se po pár misících mu?u
                        vrátit k tomu, ?e jedna z výhod C je mo?nost<br>
                        >>> dilat vici, jako:<br>
                        >>> <br>
                        >>> If
                        ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)>
                         3) {<br>
                        >>> <br>
                        >>> Co? v jiných jazycích vede na 6 ifu
                        a 1 pomocnou prominnou.<br>
                        >>> <br>
                        >>> PH<br>
                        >>> <br>
                        >>> Od: Jan Waclawek<br>
                        >>> <br>
                        >>> Hm, tak potom by som mal asi tomu
                        JW z minulosti jednu tresnut...<br>
                        >>> <br>
                        >>> Konkretne teda, C99, 6.5.8
                        Relational operators #6:<br>
                        >>> Each of the operators<  (less
                        than),>  (greater than),<= (less than or<br>
                        >>> equal to), and>=<br>
                        >>> (greater than or equal to) shall
                        yield 1 if the specified relation is true<br>
                        >>> and 0 if it is false. 92)<br>
                        >>> The result has type int.<br>
                        >>> <br>
                        >>> Ten footnote 92) je kuzelny:<br>
                        >>>    The expression a<b<c is
                        not interpreted as in ordinary mathematics. As
                        the<br>
                        >>> syntax indicates, it<br>
                        >>> means (a<b)<c; in other
                        words, ??if a is less than b, compare 1 to c;<br>
                        >>> otherwise, compare 0 to c??.<br>
                        >>> <br>
                        >>> wek<br>
                        >>> <br>
                        >>> <br>
                        >>> ----- Original Message
                        ---------------<br>
                        >>> <br>
                        >>> Mil jsem nijak za to, ?e to byl
                        právi jistý JW, kdo mi tu onehdá vyeetl, ?e<br>
                        >>> spoléhat se, ?e výsledkem podmínky
                        je 0 nebo 1 není správné:-)<br>
                        >>> <br>
                        >>> PH<br>
                        >>> <br>
                        >>> Od: Jan Waclawek<br>
                        >>> <br>
                        >>>> A jinak teda ten kód udilá to,
                        ?e pokud je splnina podmínka v závorce, nastaví
                        se bit 0 na výstupní (zda to bude bit 0 není
                        zarueeno, ale jinak skoro jisté).<br>
                        >>> <br>
                        >>> Preco by to nemal byt bit 0?<br>
                        >>> <br>
                        >>>
                        _______________________________________________<br>
                        >>> <br>
                        >>>>> <br>
                        >>>>>     DDRB |=(1<CLK_UP); <br>
                        <span style=" font-family:'courier new';
                          font-size: 10pt;"> </span></span></td>
                  </tr>
                </tbody>
              </table>
              <span style=" font-family:'calibri'; font-size: 11pt;"> <br>
                 </span></td>
          </tr>
        </tbody>
      </table>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-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>
    <p><br>
    </p>
  </body>
</html>