stm32F103C8xx stor eller liten endian?

er det en grunn til at stm32F103C8xx er stor endian og er det mulig å endre til lite endian?

Jeg har en 16bit orientert adresseringsskjema som jeg trenger å sende over wire og andre sider forventer MSB først. Eventuelt annet forslag?

For å svare på hvordan jeg gjør det, her er metoden (som ikke svarer på spørsmålet selvfølgelig).

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

Bare bruk den som to ganger 8 bit i omvendt rekkefølge, my_addr.addr_byte [1] og deretter my_addr.addr_byte [0].

Kommentarer

  • Hvorfor ikke bytebytte før du sender?
  • Gjør du det allerede, men ville bare vite om det ' er mulig.
  • SETEND LE ser ut til å gjøre jobben.
  • Hvordan sender du bitene?

Svar

STM32F103 bruker et lite endian-format i minnet som forklart i programmeringshåndbok på side 30 . Dette er også min erfaring, da jeg ikke trengte å bytte rundt byte når jeg bytter tall med PCen min (som selvfølgelig er en liten endian-maskin).

Også som forklart på ARM Knowledge-siden Cortex M 3 støtter ikke dynamisk endebrytelse, så du er fast med hva produsenten anså som riktig.

Du kan sjekke AIRCR.ENDIANNESS-biten, bare for å være 100% sikker. Hvis den leser 0, er det et lite endian-minne, hvis det er 1, bruker det big-endian.

Hvis du treffer ytelsesproblemer på grunn av bytebytte, kan du kanskje komme deg rundt disse med bruk av REV, REV16 og REVSH montørinstruksjoner (vet ikke om kompilatoren din allerede gjør dette).

Kommentarer

  • + 1 for å koble direkte til den siterte siden. Jeg visste ikke ' at du kunne gjøre det.

Svar

Alle STM32 MCU-er (og faktisk de fleste ARM Cortex-M MCU-er generelt) er lite endiske.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *