stm32F103C8xxビッグエンディアンまたはスモールエンディアン?

stm32F103C8xxがビッグエンディアンである理由はありますか?リトルエンディアンに変更することは可能ですか?

16ビット指向です私が有線で送信する必要があるアドレス指定スキームと反対側は、最初にMSBを期待します。他に何か提案はありますか?

私がどのようにやっているかに答えるために、ここに方法があります(もちろん質問には答えません)。

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

逆の順序で8ビットの2倍として使用します。my_addr.addr_byte[1]、次にmy_addr.addr_byte [0]です。

コメント

  • 送信する前にバイトスワップを行わないのはなぜですか?
  • すでに実行していますが、'可能かどうかを知りたいだけです。
  • SETEND LE がその役割を果たしているようです。
  • どのようにビットを送信していますか?

回答

STM32F103は、プログラミングマニュアル(30ページ)。これは、PC(もちろんリトルエンディアンのマシン)と番号を交換するときにバイトを切り替える必要がなかったので、これも私の経験です。

ARMナレッジページで説明されているようにCortexM 3は動的エンディアン切り替えをサポートしていないため、メーカーが正しいと見なしたものに固執します。

100%確実にするために、AIRCR.ENDIANNESSビットを確認できます。 0の場合は「リトルエンディアンメモリ」、1の場合はビッグエンディアンを使用します。

バイトスワッピングが原因でパフォーマンスの問題が発生している場合は、それらを回避できる可能性があります。 REV、REV16、およびREVSHアセンブラ命令を使用します(コンパイラがすでにこれを実行しているかどうかはわかりません)。

コメント

  • +引用されたページに直接リンクするための1。'それができるとは知りませんでした。

回答

すべてのSTM32MCU(実際、ほとんどのARM Cortex-M MCUは一般的に)はリトルエンディアンです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です