onko stm32F103C8xx: lle syytä olla iso endiani ja onko mahdollista vaihtaa pieneksi endianiksi?
Minulla on 16-bittinen suuntautuminen osoitekaavio, joka minun on lähetettävä langan kautta ja toisella puolella, odottaa ensin MSB: tä. Onko sinulla muita ehdotuksia?
Jos haluat vastata siihen, miten teen sen, tässä on menetelmä (joka ei tietenkään vastaa kysymykseen).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Käytä sitä vain kahdesti 8-bittisenä päinvastaisessa järjestyksessä, my_addr.addr_byte [1] ja sitten my_addr.addr_byte [0].
Kommentit
vastaus
STM32F103 käyttää muistissa pienen endian-muotoa, kuten ohjelmointikäsikirja sivulla 30 . Tämä on myös kokemukseni, koska minun ei tarvitse vaihtaa tavuja vaihdettaessa numeroita tietokoneeni kanssa (joka on tietysti pieni endialainen kone).
Myös kuten Cortex M ARM-tietosivulla on selitetty 3 ei tue dynaamista endianiteettikytkentää, joten olet kiinni kaikessa, mitä valmistaja pitää oikeana.
Voit tarkistaa AIRCR.ENDIANNESS-bitin vain ollaksesi 100% varma. Jos se lukee 0, se on pienen endian muisti, jos se on 1, se käyttää big-endiania.
Jos kohtaat suorituskykyongelmia tavujen vaihdon takia, saatat pystyä kiertämään ne käyttämällä REV-, REV16- ja REVSH-kokoonpano-ohjeita (tiedä, tekeekö kääntäjäsi tämän jo itsestään).
Kommentit
- + 1 linkittämiseksi suoraan mainittuun sivuun. En tiennyt ' tiennyt, että voisit tehdä niin.
Vastaa
Kaikki STM32-MCU: t (ja todellakin useimmat ARM Cortex-M MCU: t yleensä) ovat pienikokoisia.
SETEND LE
näyttää suorittavan työn.