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
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.
SETEND LE
elvégzi a munkát.