Re: C: Arduino : Přesun pole bytů do proměnné unsigned long
Petr Labaj
labaj na volny.cz
Středa Listopad 8 19:36:14 CET 2023
Spíš možná SHIFTovat a ORovat.
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.
Ale třeba je to jen můj vrozený optimismus/naivita.
PL
*********************
Dne 8.11.2023 v 18:36 Jirka Mww napsal(a):
> 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?
>
> Dne st 8. lis 2023 18:00 uživatel Jan Waclawek <konfera na efton.sk> napsal:
>
> Hm, hm. Potom neviem.
>
> Taketo "prenalepkovanie dat" sa vola "type punning". V podstate
> existuju 3
> podoby, jedna je tato, prostrednictvom pretypovania smernika; druha je
> prostrednictvom unionu; tretia je za pouzitia memcpy().
>
> Vsetky tri su principialne nespravne, v podstate tym istym
> sposobom a z
> tych istych dovodov.
>
> Programovaci jazyk resp. jeho norma je dohoda medzi programatorom
> a tvorcom
> prekladaca o pravidlach, za ktorych prekladac bude robit to, co
> programator ocakava. Veci, co by odovodnovali ten type punning, v
> pravidlach neboli.
>
> Povodne prekladace C boli priamociare a type punning "fungoval",
> takze si
> programatori zvykli. Ale zvykli si aj na to, ze prekladace su cim
> dalej
> tym chytrejsie a prelozeny kod je rychlejsi a mensi (to sa vola
> optimalizacie). No lenze chyba lavky, toto su dve protikladne
> veci; a ked
> doslo na skutocne dobre optimalizacie, tak sa ukazalo, ze programy
> pouzivajuce type punning odrazu divne prestali fungovat.
>
> Takze tvorcovia prekladacov (a ciastocne aj tvorcovia normy) su
> vystaveni
> tlaku zo strany programatorov, aby bol ten type punning nejako
> tolerovany.
> Do normy sa pridali rozne pochybne polozky o reprezentacii dat v
> pamati
> (ak by to bol slusny jazyk, nema to tam co hladat). A prekladace
> sa zufalo
> snazia uhadnut, kedy programator type punning pouzil, a nepokazit
> mu to,
> pricom vsak zachovat optimalizacie. Naviac toto vsetko podlieha modnym
> trendom (ano, programatori su tiez len ludia a v programovani su modne
> trendy), takze napriklad union uz vychadza z mody, teraz je trendy
> prisahat na memcpy().
>
> V skratke, ak nechcete problemy, ten vysledok si vyskladate z bytov.
>
> Naviac, v 8-bitovom mcu je s najvacsou pravdepodobnostou prelozeny
> vysledok
> uplne identicky, ako ked sa pouzije niektora forma type
> punningu... ten
> procesor to tak ci tak musi precitat z RX_Data byte po byte (lebo je
> 8-bitovy a inu moznost nema), a zapisat do vysledneho DATA tiez
> byte po
> byte... to, ze je to v zdrojaku zapisane nejako dlhsie alebo
> kratsie, to
> nehra ziadnu rolu...
>
> wek
>
>
> PS. Asi sa da v C++ pisat C stylom pomerne beztrestne, diablici
> tam urcite
> niekde su, ale ak ich nedrazdite niecim C++-ovitym, tak asi zostanu
> schovani... O tomto neviem dost aby som to zodpovedne popisal; len
> na to,
> ze to je iny jazyk s inymi formalnymi pravidlami, upozornujem.
>
>
> ----- Original Message ---------------
> >Ta data se čtou standardní procedurou Arduina :
> >
> >v hlavní smyčce :
> > if (Serial1.available()> 0 ){ Prijem_GOODWE(); }
> >
> >void Prijem_GOODWE() {
> >
> > inByte2 = Serial1.read();
> > RX_Data[s] = inByte2;
> > s++;
> >a tak dál.... až do celkové délky zprávy, pak se to zpracovává do
> té 32
> >bitové proměnné.
> >
> >Jinak já jsem v situaci, že rozlišování C a C++ mi dělá
> potíže...Používám
> >to jen na to Arduino.
> >
> >
> >Zdravi
> >Jirka Sloupenský OK1MWW
> >
> >
> >st 8. 11. 2023 v 17:27 odesílatel Jan Waclawek <konfera na efton.sk>
> napsal:
> >
> >> Tie data sa tam dostavaju ako, v nejakom preruseni? Potom to
> treba okorenit
> >> nejakym tym volatile
> >>
> >> DATA = *((volatile unsigned long*)(&RX+ofset))
> >>
> >> Inak Arduino nie je C ale C++.
> >>
> >> wek
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20231108/7a7b5c1b/attachment.htm>
Další informace o konferenci Hw-list