y a-t-il une raison pour que stm32F103C8xx soit big endian et est-il possible de changer en little endian?
Jai un orienté 16 bits schéma dadressage que je dois envoyer sur le fil et lautre côté attend MSB en premier. Une autre suggestion?
Pour répondre comment je le fais, voici la méthode (qui ne répond pas bien sûr à la question).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Utilisez-le simplement comme deux fois 8 bits dans lordre inverse, my_addr.addr_byte [1] puis my_addr.addr_byte [0].
Commentaires
Réponse
Le STM32F103 utilise un format little-endian dans la mémoire comme expliqué dans le manuel de programmation à la page 30 . Cest aussi mon expérience car je nai pas eu à changer doctets lors de léchange de numéros avec mon PC (qui est bien sûr une petite machine endian).
Également comme expliqué sur la page de connaissances ARM , le Cortex M 3 ne prend pas en charge la commutation dendianité dynamique, vous êtes donc coincé avec ce que le fabricant juge correct.
Vous pouvez vérifier le bit AIRCR.ENDIANNESS, juste pour être sûr à 100%. Sil lit 0, cest une mémoire petit-boutiste, si cest 1, il utilise big-endian.
Si vous rencontrez des problèmes de performances en raison de léchange doctets, vous pourrez peut-être les contourner avec lutilisation des instructions assembleur REV, REV16 et REVSH (je ne sais pas si votre compilateur le fait déjà tout seul).
Commentaires
- + 1 pour créer un lien direct vers la page citée. Je ne savais ' que vous pouviez le faire.
Réponse
Tous les microcontrôleurs STM32 (et, en fait, la plupart des microcontrôleurs ARM Cortex-M en général) sont petit-boutistes.
SETEND LE
semble faire le travail.