<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Spíš možná SHIFTovat a ORovat.<br>
    <br>
    Skoro si myslím, že při použití funkcí/maker typu htons a ntohs a
    přetypováním ukazatelů nebo unionem se dá udělat i přenositelný a
    spolehlivý kód.<br>
    Ale třeba je to jen můj vrozený optimismus/naivita.<br>
    <br>
    PL<br>
    <br>
    *********************<br>
    <br>
    <div class="moz-cite-prefix">Dne 8.11.2023 v 18:36 Jirka Mww
      napsal(a):<br>
    </div>
    <blockquote type="cite"
cite="mid:CAGNMtu2u-s6C9qC33pCUA0nY4N6ro3OTX2FRkT7E1iSQaN70aQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="auto">Díky za podrobné vysvětlení. Přece ale přenos dat
        po bytech a jejich následné složení do 32bitove proměnné není
        zase taková exotika Jak to tedy dělají profesionálové? Mám to
        opravdu pro jistotu násobit postupně 256 a sčítat? </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">Dne st 8. lis 2023 18:00
          uživatel Jan Waclawek <<a href="mailto:konfera@efton.sk"
            moz-do-not-send="true" class="moz-txt-link-freetext">konfera@efton.sk</a>>
          napsal:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">Hm, hm.
          Potom neviem.<br>
          <br>
          Taketo "prenalepkovanie dat" sa vola "type punning". V
          podstate existuju 3<br>
          podoby, jedna je tato, prostrednictvom pretypovania smernika;
          druha je<br>
          prostrednictvom unionu; tretia je za pouzitia memcpy().<br>
          <br>
          Vsetky tri su principialne nespravne, v podstate tym istym
          sposobom a z<br>
          tych istych dovodov.<br>
          <br>
          Programovaci jazyk resp. jeho norma je dohoda medzi
          programatorom a tvorcom<br>
          prekladaca o pravidlach, za ktorych prekladac bude robit to,
          co<br>
          programator ocakava. Veci, co by odovodnovali ten type
          punning, v<br>
          pravidlach neboli. <br>
          <br>
          Povodne prekladace C boli priamociare a type punning
          "fungoval", takze si<br>
          programatori zvykli. Ale zvykli si aj na to, ze prekladace su
          cim dalej<br>
          tym chytrejsie a prelozeny kod je rychlejsi a mensi (to sa
          vola<br>
          optimalizacie). No lenze chyba lavky, toto su dve protikladne
          veci; a ked<br>
          doslo na skutocne dobre optimalizacie, tak sa ukazalo, ze
          programy<br>
          pouzivajuce type punning odrazu divne prestali fungovat.<br>
          <br>
          Takze tvorcovia prekladacov (a ciastocne aj tvorcovia normy)
          su vystaveni<br>
          tlaku zo strany programatorov, aby bol ten type punning nejako
          tolerovany.<br>
          Do normy sa pridali rozne pochybne polozky o reprezentacii dat
          v pamati<br>
          (ak by to bol slusny jazyk, nema to tam co hladat). A
          prekladace sa zufalo<br>
          snazia uhadnut, kedy programator type punning pouzil, a
          nepokazit mu to,<br>
          pricom vsak zachovat optimalizacie. Naviac toto vsetko
          podlieha modnym<br>
          trendom (ano, programatori su tiez len ludia a v programovani
          su modne<br>
          trendy), takze napriklad union uz vychadza z mody, teraz je
          trendy<br>
          prisahat na memcpy().<br>
          <br>
          V skratke, ak nechcete problemy, ten vysledok si vyskladate z
          bytov.<br>
          <br>
          Naviac, v 8-bitovom mcu je s najvacsou pravdepodobnostou
          prelozeny vysledok<br>
          uplne identicky, ako ked sa pouzije niektora forma type
          punningu... ten<br>
          procesor to tak ci tak musi precitat z RX_Data byte po byte
          (lebo je<br>
          8-bitovy a inu moznost nema), a zapisat do vysledneho DATA
          tiez byte po<br>
          byte... to, ze je to v zdrojaku zapisane nejako dlhsie alebo
          kratsie, to<br>
          nehra ziadnu rolu...<br>
          <br>
          wek<br>
          <br>
          <br>
          PS. Asi sa da v C++ pisat C stylom pomerne beztrestne,
          diablici tam urcite<br>
          niekde su, ale ak ich nedrazdite niecim C++-ovitym, tak asi
          zostanu<br>
          schovani... O tomto neviem dost aby som to zodpovedne popisal;
          len na to,<br>
          ze to je iny jazyk s inymi formalnymi pravidlami, upozornujem.<br>
          <br>
          <br>
          ----- Original Message ---------------<br>
          >Ta data se čtou standardní procedurou Arduina :<br>
          ><br>
          >v hlavní smyčce :<br>
          > if (Serial1.available()> 0 ){ Prijem_GOODWE();  }<br>
          ><br>
          >void Prijem_GOODWE() {<br>
          ><br>
          >  inByte2 = Serial1.read();<br>
          >  RX_Data[s] = inByte2;<br>
          >  s++;<br>
          >a tak dál.... až do celkové délky zprávy, pak se to
          zpracovává do té 32<br>
          >bitové proměnné.<br>
          ><br>
          >Jinak já jsem v situaci, že rozlišování C a C++ mi dělá
          potíže...Používám<br>
          >to jen na to Arduino.<br>
          ><br>
          ><br>
          >Zdravi<br>
          >Jirka Sloupenský  OK1MWW<br>
          ><br>
          ><br>
          >st 8. 11. 2023 v 17:27 odesílatel Jan Waclawek <<a
            href="mailto:konfera@efton.sk" target="_blank"
            rel="noreferrer" moz-do-not-send="true"
            class="moz-txt-link-freetext">konfera@efton.sk</a>>
          napsal:<br>
          ><br>
          >> Tie data sa tam dostavaju ako, v nejakom preruseni?
          Potom to treba okorenit<br>
          >> nejakym tym volatile<br>
          >><br>
          >> DATA = *((volatile unsigned long*)(&RX+ofset))<br>
          >><br>
          >> Inak Arduino nie je C ale C++.<br>
          >><br>
          >> wek<br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>