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