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]です。
コメント
回答
STM32F103は、プログラミングマニュアル(30ページ)。これは、PC(もちろんリトルエンディアンのマシン)と番号を交換するときにバイトを切り替える必要がなかったので、これも私の経験です。
ARMナレッジページで説明されているようにCortexM 3は動的エンディアン切り替えをサポートしていないため、メーカーが正しいと見なしたものに固執します。
100%確実にするために、AIRCR.ENDIANNESSビットを確認できます。 0の場合は「リトルエンディアンメモリ」、1の場合はビッグエンディアンを使用します。
バイトスワッピングが原因でパフォーマンスの問題が発生している場合は、それらを回避できる可能性があります。 REV、REV16、およびREVSHアセンブラ命令を使用します(コンパイラがすでにこれを実行しているかどうかはわかりません)。
コメント
- +引用されたページに直接リンクするための1。'それができるとは知りませんでした。
回答
すべてのSTM32MCU(実際、ほとんどのARM Cortex-M MCUは一般的に)はリトルエンディアンです。
SETEND LE
がその役割を果たしているようです。