Arduino - 32 bitu promenna ze 4 byte

Vláďa Anděl vaelektronik na vaelektronik.cz
Neděle Prosinec 15 23:22:10 CET 2024


S céčkem taky někdy bojuju, ale taky někdy vyhrávám :-) Podobnou věc 
jsem řešil přes pointery. Bylo to pole proměnných, ale to je jedno. 
Načtení z flash, (vyhrazená stránka z code se u silabsu dá použít jako 
eeprom pro data) kterou dokážu číst jen po bajtu, přes pointer zapisuju 
do pole. Na stejnou adresu umístím počátek dvoubajtového  (nebo u vás 
čtyřbajtového) pole a tam si to pak přečtu. Překladač mi sice dává 
varování, ale na to jsem si už zvyk :-) Ale dělá to přesně to, co 
chcete. Třeba to ten union přeloží taky takhle elegantně, ale nevím.

Anděl

Dne 15.12.2024 v 17:36 Martin Locker napsal(a):
> 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
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20241215/75e64209/attachment.htm>


Další informace o konferenci Hw-list