finns det en anledning till att stm32F103C8xx är stor endian och är det möjligt att byta till lite endian?
Jag har en 16bit orienterad adresseringsschema som jag behöver skicka via tråd och andra sidan förväntar sig MSB först. Någon annan förslag?
För att svara på hur jag gör det här är metoden (som inte svarar på frågan självklart).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Använd den bara som två gånger 8 bitar i omvänd ordning, my_addr.addr_byte [1] och sedan my_addr.addr_byte [0].
Kommentarer
Svar
STM32F103 använder ett lite endianformat i minnet som förklaras i programmeringshandbok på sidan 30 . Det här är också min upplevelse eftersom jag inte behövde byta runt byte när jag bytte nummer med min PC (vilket naturligtvis är en liten endianmaskin).
Även som förklaras på ARM-kunskapssidan Cortex M 3 stöder inte dynamisk ändring av ändamål, så du är fast med vad tillverkaren ansåg rätt.
Du kan kontrollera AIRCR.ENDIANNESS-biten, bara för att vara 100% säker. Om den läser 0 är det ”ett lite endianminne, om det” 1 använder det big-endian.
Om du stöter på prestandaproblem på grund av bytebyte kan du kanske komma runt dem med hjälp av instruktioner för samlare REV, REV16 och REVSH (vet inte om din kompilator redan gör det av sig själv).
Kommentarer
- + 1 för att länka direkt till den citerade sidan. Jag visste inte ' att du kunde göra det.
Svar
Alla STM32 MCU: er (och faktiskt de flesta ARM Cortex-M MCU: er i allmänhet) är små endianer.
SETEND LE
verkar göra jobbet.