Arduino - 32 bitu promenna ze 4 byte
Martin Záruba
swz na volny.cz
Středa Prosinec 18 14:28:30 CET 2024
Jak jste dopadl pokud jde o data ze SpotProcessoru. Původně jsem něco
takového chtěl napsat jako podprogram do našeho serveru, ale je to fuška
a pokud to dává rozumné výsledky, nemá cenu to programovat.
Děkuji
Martin Záruba
Dne 18.12.2024 v 14:12 Jirka Mww napsal(a):
> Moje data konstantní nejsou, je to obsah MOdbus zprávy ze
> Spotprocessoru. Jediné co je konstantní je poloha těch dat v Modbus
> zprávě, RX[7] až RX[10].
> Kam se ta data zapíší záleží na jiné části Modbus zprávy.
> Zdravi
> Jirka Sloupenský OK1MWW
>
>
> st 18. 12. 2024 v 14:09 odesílatel Miroslav Mraz <mrazik na volny.cz> napsal:
>
> Už dlouho s AVR nedělám, ale pořád mám nástroje, tak jsem trochu
> experimentoval.
> Mějme nějaká data v RAM (const je zde nepodstatné) např.
> static const uint8_t RX_Data[] = { 0x90, 0xab, 0xcd, 0xef, 0xab,
> 0xcd,
> 0xef, 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef,};
> a funkci
> static void test_swap () {
> const uint32_t PowerIO = __builtin_bswap32 (((uint32_t
> *)(RX_Data +
> 7))[0]);
> printf("0x%08lX\n", PowerIO);
> }
> Funguje to správně, ale na 8-bitu to není příliš efektivní. Funkce
> static void test_shift () {
> uint32_t PowerIO = 0ul;
> const unsigned b = 7u, e = b + sizeof(PowerIO);
> for (unsigned n=b; n<e; n++) {
> PowerIO <<= 8;
> PowerIO |= RX_Data [n];
> }
> printf("0x%08lX\n", PowerIO);
> }
> funguje stejně a při optimalizaci -Os a pokud jsou data opravdu
> konstantní a překladač vidí jejich hodnoty už v době překladu, je to
> daleko efektivnější. Smyčka se rozbalí do jednotlivých kroků,
> posun o 8
> bitů chápe překladač jako přechod na jiný byte, takže to
> jednotlivé byty
> ze vstupu nasype přesně tam, kam je potřeba a nic víc vlastně nedělá,
> není to potřeba. Lokální proměnné b,e,n se vůbec neprojeví takže
> na typu
> nezáleží.
>
> Mrazík
>
>
> On 18. 12. 24 13:26, Pavel Hudeček wrote:
> > Nedávno jsem potřeboval posílat ven SN procesoru, udělal jsem to
> takhle:
> > u64=0ULL;
> > u64 <<= 8; u64 |= SIGROW.SERNUM5;
> > u64 <<= 8; u64 |= SIGROW.SERNUM4;
> > u64 <<= 8; u64 |= SIGROW.SERNUM3;
> > u64 <<= 8; u64 |= SIGROW.SERNUM2;
> > u64 <<= 8; u64 |= SIGROW.SERNUM1;
> > u64 <<= 8; u64 |= SIGROW.SERNUM0;
> >
> > Ale vlastně nevím jak je to tam s těma indiánama, možná to má bejt
> > obráceně, tady mi to naštěstí nevadí:-)
> >
> > PH
> >
> _______________________________________________
> 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/20241218/0b0a8a59/attachment.htm>
Další informace o konferenci Hw-list