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