Arduino - 32 bitu promenna ze 4 byte

Miroslav Mraz mrazik na volny.cz
Pondělí Prosinec 16 14:18:44 CET 2024


Tyhle funkce sice existují, ale v bare-metal dost problematicky. 
Předpokládá to síťování a to není úplně běžné. Třeba v newlib je to 
zašité v machine/endian.h a samo sebou vše vede přímo na 
__builtin_bswap32, příp. __builtin_bswap16 o kterém jsem se zmínil 
minule. Takže když to použijete rovnou, nemusíte hledat hlavičku, která 
by měla být podle manuálu arpa/inet.h. Pro PC tam skutečně je, ale 
definice těch funkcí je stejně někde jinde (netinet/in.h nebo jinde).

Je to zkrátka bordel.

Mrazík

On 15. 12. 24 23:47, Petr Labaj wrote:
> Protože se po síti často pohybují jiní indiáni než bydlí v počítačích, 
> tak už odjakživa (co existují sítě) existují funkce ntohs, htons, ntohl, 
> htonl.
> Je to zkratka z network-to-hardware-short, ... totéž opačně a totéž pro 
> long.
> Jsou snad vždy a všude (od AVR po superpočítače od IBM), a jsou vždy 
> správně pro danou platformu a maximálně zoptimalizované, protože v 
> síťovém programování se to používá furt.
> Network order je vždy Big Endian.
> 
> Takže Vaše použití by pak vypadalo nějak takto:
> PowerIO = ntohl (*(uint32_t *) (RX_Data+7));
> 
> PL
> 


Další informace o konferenci Hw-list