Arduino - 32 bitu promenna ze 4 byte

Miroslav Mraz mrazik na volny.cz
Středa Prosinec 18 15:29:33 CET 2024


Patrně narážíte na Cortex-M0. Ze zkušenosti mohu říct, že tyto problémy 
tam opravdu kdysi byly. Současné překladače by to měly mít už vyřešeno. 
V newlib ntohs vede na __builtin_bswap16 a to zase na instrukci rev16. 
Ale nelze vyloučit, že nevhodné přetypování může dělat problémy. Asi je 
jednodušší data nakopírovat memcpy() na správně zarovnanou adresu už 
před voláním ntoh.

Mrazík

On 18. 12. 24 14:36, Slavomir Skopalik wrote:
> Jen jedna zajimavost, zkouseli jsme ntoh, ale u ARMu jsme narazili na to,
> 
> ze nedokaze cist/zapisovat 16/32 bit z nezarovnane adresy (CPU spadne do 
> faultu).
> 
> Takze tam nakonec zutalo tohle (take ModBus):
> 
> for(uint i = 0; i < Cnt; i++){
>          uint16_t v = a->Data[Addr + i];
>          RxTxBuffer[3 + 2*i] = v >> 8;
>          RxTxBuffer[3 + 2*i + 1] = v;
>      }
> 
> Slavek
> 
>


Další informace o konferenci Hw-list