<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">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">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>
<br>
_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote></div>