stm32F103C8xx velký nebo malý endian?

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

  • Proč před odesláním nevyměnit bajt?
  • Již to děláte, ale chtěli jsme vědět, jestli je to ' možné.
  • Zdá se, že SETEND LE svou práci plní.
  • Jak posíláte bitové kopie?

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *