stm32F103C8xx duży czy mały endian?

Czy istnieje powód, dla którego stm32F103C8xx jest big endianem i czy można zmienić na little endian?

Mam 16-bitowy zorientowany schemat adresowania, który muszę wysłać przez przewód, a druga strona oczekuje najpierw MSB. Jakieś inne sugestie?

Aby odpowiedzieć, jak to robię, oto metoda (która oczywiście nie daje odpowiedzi na pytanie).

typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr; 

Po prostu użyj go jako dwa razy 8 bitów w odwrotnej kolejności, my_addr.addr_byte [1], a następnie my_addr.addr_byte [0].

Komentarze

  • Dlaczego nie zamienić bajtów przed wysłaniem?
  • Już to robię, ale chciałem tylko wiedzieć, czy ' jest możliwe.
  • SETEND LE wydaje się działać.
  • Jak wysyłasz bity?

Odpowiedź

STM32F103 używa w pamięci formatu little-endian, jak wyjaśniono w podręcznik programowania na stronie 30 . To także moje doświadczenie, ponieważ nie musiałem przełączać się między bajtami podczas wymiany liczb z komputerem (który jest oczywiście maszyną typu little endian).

Również, jak wyjaśniono na stronie wiedzy o ARM , Cortex M 3 nie obsługuje dynamicznego przełączania endianness, więc utkniesz z tym, co producent uznał za słuszne.

Możesz sprawdzić bit AIRCR.ENDIANNESS, aby mieć 100% pewności. Jeśli odczytuje 0, jest to pamięć little-endian, jeśli jest 1, używa big-endian.

Jeśli masz problemy z wydajnością z powodu zamiany bajtów, możesz być w stanie ominąć te przy pomocy instrukcji asemblera REV, REV16 i REVSH (nie wiem, czy Twój kompilator już to robi).

Komentarze

  • + 1 do bezpośredniego linku do cytowanej strony. Nie ' nie wiedziałem, że możesz to zrobić.

Odpowiedź

Wszystkie mikrokontrolery STM32 (i faktycznie większość mikrokontrolerów ARM Cortex-M w ogóle) to little-endian.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *