Arduino - 32 bitu promenna ze 4 byte

Jirka Mww jirka.mww na gmail.com
Neděle Prosinec 15 17:51:22 CET 2024


Díky, to union vypadá dobře.

Dne ne 15. 12. 2024 17:36 uživatel Martin Locker <locker na vosrk.cz> napsal:

> Protože nebyla splněna podmínka, kterou jsem uváděl, tj. little endian.
> Dle uváděného funkčního kódu je to uloženo big endian.
> Takže jednoduché zkopírování nemůže fungovat. Je nutné byty přerovnat,
> takže buď ty shifty, union (viz. níže) nebo ten asembler.
>
> varianta union:
>
> // ----------------------------
> union TData {
>   long x;
>   byte a[4];
> };
>
> TData data;
> data.a[0] = RX_Data[10];
> data.a[1] = RX_Data[9];
> data.a[2] = RX_Data[8];
> data.a[3] = RX_Data[7];
> // ----------------------------
>
> v data.x je vysledné číslo (doufám, že tam není chybka, píšu to od stolu)
>
> Martin Locker
>
> ----- Původní zpráva -----
> ------------------------------
> Odesilatel: Jirka Mww (jirka.mww na gmail.com)
> Datum: 15/12/2024 17:23
> Příjemce: HW-news (hw-list na list.hw.cz)
> Předmět: Re: Arduino - 32 bitu promenna ze 4 byte
>
> 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
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by 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
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> ------------------------------
> _______________________________________________
> HW-list mailing list  -  sponsored by 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
> 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/a94e770d/attachment.htm>


Další informace o konferenci Hw-list