¿Hay alguna razón para que stm32F103C8xx sea big endian y es posible cambiar a little endian?
Tengo un 16bit orientado esquema de direccionamiento que necesito enviar por cable y el otro lado espera MSB primero. ¿Alguna otra pregunta?
Para responder cómo lo estoy haciendo, aquí está el método (que no responde a la pregunta, por supuesto).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Solo utilícelo como dos veces 8 bits en orden inverso, my_addr.addr_byte [1] luego my_addr.addr_byte [0].
Comentarios
Respuesta
El STM32F103 usa un formato little-endian en la memoria como se explica en el manual de programación en la página 30 . Esta es también mi experiencia, ya que no tuve que cambiar bytes cuando intercambiaba números con mi PC (que es una pequeña máquina endian, por supuesto).
También como se explica en la página ARM Knowledge , el Cortex M 3 no admite la conmutación de endianidad dinámica, por lo que está atascado con lo que el fabricante considere correcto.
Puede verificar el bit AIRCR.ENDIANNESS, solo para estar 100% seguro. Si lee 0 es una memoria little-endian, si es 1, usa big-endian.
Si tiene problemas de rendimiento debido al intercambio de bytes, es posible que pueda evitarlos. con el uso de instrucciones de ensamblador REV, REV16 y REVSH (no sé si su compilador ya lo hace por sí mismo).
Comentarios
- + 1 para vincular directamente a la página citada. No ' no sabía que podía hacer eso.
Responder
Todas las MCU STM32 (y, de hecho, la mayoría de las MCU ARM Cortex-M en general) son little-endian.
SETEND LE
parece hacer el trabajo.