stm32F103C8xx endian grande o pequeño?

2

¿hay alguna razón para que stm32F103C8xx sea big endian y es posible cambiarlo a little endian?

Tengo un esquema de direccionamiento orientado de 16 bits que necesito enviar por cable y el otro lado espera MSB primero. ¿Alguna otra sugerencia?

Para responder cómo lo estoy haciendo, aquí está el método (que no responde la pregunta, por supuesto).

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

} my_addr;

Solo úselo como dos veces 8 bits en orden inverso, my_addr.addr_byte [1] luego my_addr.addr_byte [0].

    
pregunta user505160

2 respuestas

7

El STM32F103 usa un formato little-endian en la memoria como se explica en programming manual en la página 30 . Esta es también mi experiencia, ya que no tuve que cambiar los bytes al intercambiar números con mi PC (que por supuesto es una pequeña máquina endian).

También como se explica en la página de conocimientos de ARM el Cortex M3 no admite el cambio dinámico de endianness, 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 las instrucciones de ensamblador REV, REV16 y REVSH (no sé si su compilador ya lo hace por sí mismo).

    
respondido por el Arsenal
1

Todas las MCU STM32 (y, de hecho, la mayoría de las MCU ARM Cortex-M en general) son little-endian.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas