há uma razão para stm32F103C8xx ser big endian e é possível mudar para little endian?
Eu tenho um orientado a 16 bits esquema de endereçamento que preciso enviar por fio e o outro lado espera o MSB primeiro. Alguma outra sugestão?
Para responder como estou fazendo isso, aqui está o método (que não responde à pergunta, é claro).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Basta usá-lo como duas vezes 8 bits na ordem inversa, my_addr.addr_byte [1] e depois my_addr.addr_byte [0].
Comentários
Resposta
O STM32F103 usa um formato little-endian na memória, conforme explicado no manual de programação na página 30 . Esta também é minha experiência, já que não tive que trocar bytes ao trocar números com meu PC (que é uma pequena máquina endian, é claro).
Também conforme explicado na página ARM Knowledge do Cortex M 3 não suporta comutação dinâmica de endianness, então você está preso ao que o fabricante considerou correto.
Você pode verificar o bit AIRCR.ENDIANNESS, apenas para ter 100% de certeza. Se ler 0 é “uma memória little-endian, se” 1, usa big-endian.
Se você está tendo problemas de desempenho por causa da troca de bytes, pode ser capaz de contorná-los com o uso de instruções assembler REV, REV16 e REVSH (não sei se seu compilador já faz isso sozinho).
Comentários
- + 1 para vincular diretamente à página citada. Não ' sabia que você poderia fazer isso.
Resposta
Todos os MCUs STM32 (e, de fato, a maioria dos MCUs ARM Cortex-M em geral) são little-endian.
SETEND LE
parece funcionar.