stm32F103C8xx nagy vagy kicsi endian?

Van-e oka annak, hogy az stm32F103C8xx nagy endián legyen, és lehet-e kis endianra váltani?

16 bites orientációm van címzési séma, amelyet át kell küldenem vezetéken és a másik oldalon, először az MSB-re számít. Van még valami javaslat?

Hogy megválaszoljam, hogyan csinálom, íme a módszer (amely természetesen nem válaszol a kérdésre).

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

Csak kétszer 8 bitként használja fordított sorrendben, my_addr.addr_byte [1], majd my_addr.addr_byte [0].

Megjegyzések

  • Miért ne cserélhetné a bájtcserét az elküldés előtt?
  • Már csinálja, de csak tudni akarja, hogy ' lehetséges-e.
  • Úgy tűnik, hogy SETEND LE elvégzi a munkát.
  • Hogyan küldi a biteket?

Válasz

Az STM32F103 egy kis endian formátumot használ a memóriában, a programozási kézikönyv a 30. oldalon . Ez is az én tapasztalatom, mivel nem kellett bájtokat váltanom, amikor számokat cseréltem a számítógépemmel (ami természetesen egy kis endian gép).

Szintén a Cortex M ARM-tudás oldalán leírtak szerint A 3 nem támogatja a dinamikus endianness kapcsolást, ezért ragaszkodik bármihez, amelyet a gyártó helyesnek ítél.

Ellenőrizheti az AIRCR.ENDIANNESS bitet, csak 100% -ig biztosan. Ha 0 értéket olvas, akkor ez egy kis endián memória, ha pedig 1, akkor nagy endiánt használ.

Ha a bájtcsere miatt teljesítményproblémákat üt el, akkor ezeket megkerülheti. REV, REV16 és REVSH assembler utasítások használatával (nem tudom, hogy a fordítója ezt már önmagában csinálja-e).

Megjegyzések

  • + 1 a hivatkozott oldalra történő közvetlen linkeléshez. Nem tudtam, hogy ' tudtam, hogy ezt megteheti.

Válasz

Az összes STM32 MCU (és általában a legtöbb ARM Cortex-M MCU) kevéssé endáns.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük