stm32F103C8xx großer oder kleiner Endian?

Gibt es einen Grund dafür, dass stm32F103C8xx Big Endian ist, und ist es möglich, zu Little Endian zu wechseln?

Ich habe eine 16-Bit-Ausrichtung Adressierungsschema, das ich über Kabel und andere Seite senden muss, erwartet zuerst MSB. Irgendwelche anderen Vorschläge?

Um zu beantworten, wie ich es mache, hier die Methode (die die Frage natürlich nicht beantwortet).

typedef union ___address{ uint16_t address; uint8_t addr_byte[2] ; } my_addr; 

Verwenden Sie es einfach als zweimal 8-Bit in umgekehrter Reihenfolge, my_addr.addr_byte [1] und dann my_addr.addr_byte [0].

Kommentare

  • Warum nicht vor dem Senden einen Byte-Tausch durchführen?
  • Ich mache es bereits, wollte aber nur wissen, ob es ' möglich ist.
  • SETEND LE scheint den Job zu erledigen.
  • Wie senden Sie die Bits?

Antwort

Der STM32F103 verwendet ein Little-Endian-Format im Speicher, wie in Programmierhandbuch auf Seite 30 . Dies ist auch meine Erfahrung, da ich beim Austausch von Zahlen mit meinem PC (der natürlich eine kleine Endian-Maschine ist) keine Bytes umschalten musste.

Auch wie auf der ARM-Wissensseite des Cortex M erläutert 3 unterstützt kein dynamisches Endianness-Umschalten, daher bleiben Sie bei dem, was der Hersteller für richtig hält.

Sie können das AIRCR.ENDIANNESS-Bit überprüfen, um 100% sicher zu sein. Wenn es 0 lautet, ist es „ein Little-Endian-Speicher, wenn es 1 ist, wird Big-Endian verwendet.

Wenn Sie aufgrund des Byte-Austauschs auf Leistungsprobleme stoßen, können Sie diese möglicherweise umgehen unter Verwendung der Assembler-Anweisungen REV, REV16 und REVSH (Sie wissen nicht, ob Ihr Compiler dies bereits selbst tut).

Kommentare

  • + 1 für den direkten Link zu der zitierten Seite. Ich wusste nicht, dass Sie das tun können.

Antwort

Alle STM32-MCUs (und in der Tat die meisten ARM Cortex-M-MCUs im Allgemeinen) sind Little-Endian.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.