is er een reden waarom stm32F103C8xx big endian is en is het mogelijk om te veranderen in little endian?
Ik heb een 16 bit georiënteerde adresseringsschema dat ik over de draad moet verzenden en de andere kant verwacht eerst MSB. Nog een andere suggestie?
Om te beantwoorden hoe ik het doe, is hier de methode (die de vraag natuurlijk niet beantwoordt).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Gebruik het gewoon als twee keer 8 bit in omgekeerde volgorde, my_addr.addr_byte [1] en dan my_addr.addr_byte [0].
Reacties
Answer
De STM32F103 gebruikt een little-endian formaat in het geheugen zoals uitgelegd in de programmeerhandleiding op pagina 30 . Dit is ook mijn ervaring aangezien ik” niet tussen bytes hoefde te wisselen bij het uitwisselen van nummers met mijn pc (wat natuurlijk een kleine endian-machine is).
Zoals ook uitgelegd op de ARM-kennispagina de Cortex M 3 ondersteunt geen dynamische endianness-omschakeling, dus u zit vast met wat de fabrikant juist acht.
U kunt het AIRCR.ENDIANNESS-bit controleren, gewoon voor 100% zeker. Als het 0 leest, is het een little-endian-geheugen, als het 1 is, gebruikt het big-endian.
Als je prestatieproblemen ondervindt vanwege het wisselen van bytes, kun je die mogelijk omzeilen met het gebruik van REV, REV16 en REVSH assembler instructies (weet niet of je compiler dit zelf al doet).
Reacties
- + 1 om rechtstreeks naar de geciteerde pagina te linken. Ik wist niet ' niet dat je dat zou kunnen.
Antwoord
Alle STM32 MCUs (en inderdaad de meeste ARM Cortex-M MCUs in het algemeen) zijn little-endian.
SETEND LE
lijkt het werk te doen.