stm32F103C8xx big or small endian?

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

  • Por que não troca de bytes antes de enviar?
  • Já estou fazendo, mas só queria saber se ' é possível.
  • SETEND LE parece funcionar.
  • Como você está enviando os bits?

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *