stm32F103C8xx endian grande o piccolo?

cè un motivo per cui stm32F103C8xx è big endian ed è possibile passare a little endian?

Ho un 16 bit oriented schema di indirizzamento che devo inviare tramite cavo e laltro lato si aspetta prima MSB. Qualche altro suggerimento?

Per rispondere a come lo sto facendo, ecco il metodo (che ovviamente non risponde alla domanda).

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

Basta usarlo due volte a 8 bit in ordine inverso, my_addr.addr_byte [1] quindi my_addr.addr_byte [0].

Commenti

  • Perché non lo scambio di byte prima dellinvio?
  • Lo sto già facendo, ma volevo solo sapere se è ' possibile.
  • SETEND LE sembra fare il lavoro.
  • Come invii i bit?

Risposta

LSTM32F103 utilizza un formato little-endian nella memoria come spiegato in manuale di programmazione a pagina 30 . Questa è anche la mia esperienza in quanto non dovevo cambiare byte durante lo scambio di numeri con il mio PC (che è ovviamente una piccola macchina endian).

Inoltre, come spiegato nella pagina di conoscenza di ARM , il Cortex M 3 non supporta la commutazione dinamica dellendianness, quindi sei bloccato con qualsiasi cosa il produttore ritenga giusto.

Puoi controllare il bit AIRCR.ENDIANNESS, solo per essere sicuro al 100%. Se legge 0 è “una memoria little-endian, se è 1 usa big-endian.

Se stai riscontrando problemi di prestazioni a causa dello scambio di byte, potresti essere in grado di aggirarli con luso delle istruzioni assembler REV, REV16 e REVSH (non so se il tuo compilatore lo fa già da solo).

Commenti

  • + 1 per il collegamento diretto alla pagina citata. ' non sapevo che potessi farlo.

Risposta

Tutti gli MCU STM32 (e, in effetti, la maggior parte degli MCU ARM Cortex-M in generale) sono little endian.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *