existuje důvod, aby byl stm32F103C8xx velkým endianem a je možné jej změnit na malý endian?
Mám 16bitovou orientaci schéma adresování, které musím poslat po drátu a druhá strana očekává MSB jako první. Nějaký další návrh?
Chcete-li odpovědět, jak to dělám, zde je metoda (která samozřejmě na otázku neodpovídá).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Stačí jej použít jako dvakrát 8bitový v opačném pořadí, my_addr.addr_byte [1] a poté my_addr.addr_byte [0].
Komentáře
Odpověď
STM32F103 používá v paměti formát s malým endianem, jak je vysvětleno v programovací příručka na straně 30 . To je také moje zkušenost, protože jsem nemusel přepínat bajty při výměně čísel s mým PC (což je samozřejmě malý endian stroj).
Jak je vysvětleno na stránce znalostí ARM , Cortex M 3 nepodporuje dynamické přepínání endianness, takže jste uvízli v čemkoli, co výrobce považoval za správné.
Můžete si zkontrolovat bit AIRCR.ENDIANNESS, abyste si byli 100% jisti. Pokud čte 0, jedná se o paměť typu „small-endian“, pokud jde o hodnotu 1, používá formát „big-endian“.
Pokud narážíte na problémy s výkonem kvůli výměně bajtů, můžete tyto problémy obejít. s použitím instrukcí assembleru REV, REV16 a REVSH (nevím, jestli to váš kompilátor již sám dělá).
Komentáře
- + 1 pro přímý odkaz na citovanou stránku. Nevěděl jsem ', že byste to mohli udělat.
Odpovědět
Všechny mikroprocesory STM32 (a samozřejmě většina MCU ARM Cortex-M obecně) mají malý endian.
SETEND LE
svou práci plní.