există un motiv pentru care stm32F103C8xx să fie endian mare și este posibil să treci la endian mic?
Am o orientare pe 16 biți schema de adresare pe care trebuie să o trimit prin cablu și alte părți se așteaptă mai întâi la MSB. Orice altă sugestie?
Pentru a răspunde la modul în care o fac, iată metoda (care nu răspunde bineînțeles la întrebarea).
typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr;
Folosește-l de două ori pe 8 biți în ordine inversă, my_addr.addr_byte [1] apoi my_addr.addr_byte [0].
Comentarii
Răspuns
STM32F103 utilizează un format puțin endian în memorie, așa cum este explicat în manual de programare la pagina 30 . Aceasta este, de asemenea, experiența mea, deoarece nu a trebuit să schimb octeții când fac schimb de numere cu computerul meu (care este o mică mașină endiană, desigur).
De asemenea, așa cum se explică în pagina ARM Knowledge Cortex M 3 nu acceptă comutarea dinamică a endianității, deci sunteți blocat cu tot ceea ce producătorul a considerat corect.
Puteți verifica bitul AIRCR.ENDIANNESS, doar pentru a fi 100% sigur. Dacă citește 0 este „o memorie little-endian, dacă este 1 folosește big-endian.
Dacă întâmpinați probleme de performanță din cauza swap-ului de octeți, este posibil să le puteți ocoli. cu utilizarea instrucțiunilor de asamblare REV, REV16 și REVSH (nu știți dacă compilatorul dvs. face deja acest lucru de la sine).
Comentarii
- + 1 pentru conectarea directă la pagina citată. Nu ' nu știam că poți face asta.
Răspuns
Toate MCU-urile STM32 (și, într-adevăr, majoritatea MCU-urilor ARM Cortex-M în general) sunt puțin endiene.
SETEND LE
pare să facă treaba.