stm32F103C8xx stor eller lille endian?

er der en grund til, at stm32F103C8xx er stor endian, og er det muligt at skifte til lidt endian?

Jeg har en 16bit orienteret adresseringsordning, som jeg skal sende via wire, og den anden side forventer MSB først. Enhver anden antydning?

For at besvare, hvordan jeg gør det, er her metoden (som ikke svarer på spørgsmålet selvfølgelig).

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

Brug det kun som to gange 8 bit i omvendt rækkefølge, my_addr.addr_byte [1] og derefter my_addr.addr_byte [0].

Kommentarer

  • Hvorfor ikke byteudskiftning før afsendelse?
  • Allerede ved at gøre det, men ville bare vide, om det ' er muligt.
  • SETEND LE ser ud til at gøre jobbet.
  • Hvordan sender du bitene?

Svar

STM32F103 bruger et lille endian-format i hukommelsen som forklaret i programmeringsvejledning på side 30 . Dette er også min oplevelse, da jeg ikke behøvede at skifte byte, når jeg udvekslede tal med min pc (hvilket selvfølgelig er en lille endian-maskine).

Også som forklaret på ARM-videnside Cortex M 3 understøtter ikke dynamisk skift af endianness, så du sidder fast med det, som producenten anså for rigtigt.

Du kan kontrollere AIRCR.ENDIANNESS bit, bare for at være 100% sikker. Hvis det læser 0, er det “en lille-endian-hukommelse, hvis det” er 1, bruger det big-endian.

Hvis du rammer ydeevneproblemer på grund af byteudskiftning, kan du muligvis komme rundt ved brug af REV, REV16 og REVSH montørinstruktioner (ved ikke, om din kompilator allerede gør det af sig selv).

Kommentarer

  • + 1 for at linke direkte til den citerede side. Jeg vidste ikke ' at du kunne gøre det.

Svar

Alle STM32 MCUer (og faktisk de fleste ARM Cortex-M MCUer generelt) er små endianer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *