<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>