Arduino - 32 bitu promenna ze 4 byte

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Neděle Prosinec 15 18:19:48 CET 2024


A jak vypada preklad do assembleru, pokud je videt?
PowerIO = ((uint32_t)RX_Data[7] <<24 ) | ((uint32_t)RX_Data[8] <<16 ) | 
((uint32_t)RX_Data[9] <<8 ) | ((uint32_t)RX_Data[10] <<0 );
Ale je mozne, ze se to prelozi uplne stejne. Uz nevim u ceho, ale kdyz 
jsem to kdysi zkoumal, prekladac to pochopil a nahazel byty rovnou na 
prislusna mista. Ted uz takove detaily neresim, at si to prelozi jak 
chce s dnesnimi vykony a velikosti pameti.

Ja bych to spis udelal takhle:

Dne 15.12.2024 v 17:29 Jirka Mww napsal(a):
> Vypadá to, že to union by mohlo fungovat, nenapadlo mě to, ještě jsem 
> to nikdy nepoužil.
> díky za rady.
>
> Zdravi
> Jirka Sloupenský  OK1MWW
>
>
> ne 15. 12. 2024 v 17:23 odesílatel Jirka Mww <jirka.mww na gmail.com> napsal:
>
>     To co funguje je tohle :
>
>     PowerIO = (((((RX_Data[7] <<8 ) + RX_Data[8]) <<8) + RX_Data[9])
>     << 8) + RX_Data[10];
>     to od pana Lockera nefunguje, překladačem to projde, ale dává to
>     nesmyslně vysoké číslo.
>     Zdravi
>     Jirka Sloupenský  OK1MWW
>
>
>     ne 15. 12. 2024 v 17:18 odesílatel Pavel Hudeček
>     <edizon na seznam.cz> napsal:
>
>         A pokud je to opačně, tak ten long dát do unionu s polem bajtů
>         a nakopírovat po jednom ve správném pořadí.
>
>         Přesnější rady by mohly být, kdyby byl k dispozici ten kód co
>         fungoval a ten co nefungoval. Možná tem jenom někde chyběl &,
>         možná tam indiáni bojujou.
>
>         PH
>
>
>         Dne 15.12.2024 v 16:59 Martin Locker napsal(a):
>>         Za předpokladu, že je to 8-bitové arduino a data jsou little
>>         endian, tak třeba takto:
>>           long x;
>>           memcpy(&x, &RX[7], 4);
>>         nebo
>>           long x = *((long*)&RX[7]);
>>
>>         Martin Locker
>>
>>
>>         ----- Původní zpráva -----
>>         ------------------------------------------------------------------------
>>         Odesilatel: Jirka Mww (jirka.mww na gmail.com)
>>         Datum: 15/12/2024 16:22
>>         Příjemce: HW konference (hw-list na list.hw.cz)
>>         Předmět: Arduino - 32 bitu promenna ze 4 byte
>>
>>         dobr7 den,
>>
>>         zase bych potreboval poradit :  Mam 4 byte v poli  RX[7]  az
>>         RX[10]  (prijata modbus zprava)
>>         a potrebuji z nich udelat 32 bit proměnnou (log int).  
>>         Postupne nacitani a posuny o 8 bitu  do leva mi funguje, ale
>>         radeji bych to nejak prekopiroval rovnou, kvuli rychlosti. 
>>         Zkousel jsem pouzit memcpy , ale asi to delam blbe, muzete mi
>>         dat nejaky tip , jak to udelat ?  V assembleru bych to umel ((::
>>         Zdravi
>>         Jirka Sloupenský  OK1MWW
>>         ------------------------------------------------------------------------
>>         _______________________________________________
>>         HW-list mailing list  -  sponsored by www.HW.cz
>>         <http://www.HW.cz>
>>         Hw-list na list.hw.cz
>>         http://list.hw.cz/mailman/listinfo/hw-list
>>
>>         _______________________________________________
>>         HW-list mailing list  -  sponsored bywww.HW.cz <http://www.HW.cz>
>>         Hw-list na list.hw.cz
>>         http://list.hw.cz/mailman/listinfo/hw-list
>
>         _______________________________________________
>         HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>         Hw-list na list.hw.cz
>         http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20241215/168e62bf/attachment.htm>


Další informace o konferenci Hw-list