質問: 0を返します。なぜですか? 私はまた、書き込みメソッドがありますが、読み取りメソッドはありません。 read8のみ。推理?
回答: `addr` が `0xbeef` であるとしましょう。次に、各操作を分解した場合: ``` expression │ value ───────────────────────┼─────── addr │ 0xbeef addr >> 8 │ 0x00be (uint8_t)(addr >> 8) │ 0xbe addr & 0xFF │ 0x00ef (uint8_t)(addr & 0xFF) │ 0xef ``` したがって、これは基本的にアドレスを2つの8ビットチャンクに分割しています。 それらのチャンクを個別に送信する。これは次のように行われます。 SPIはバイトのみを送信します。 > キャスティングでは、符号拡張が発生しないようにしています。 > > `addr` は符号なしの番号なので、符号拡張ではないことはありません。 キャスティングは実際には有用な目的を果たしません。 コード。これは、 `SPItransfer()`が `uint8_t` の引数です。 `SPItransfer()`を使用している場合は、キャスト*可能* 16ビットバージョンでオーバーロードされました。 > 最後に、常に同じ値x = 0を返します。なぜですか? > > いいえ、 `SPItransfer(0);` の呼び出しが何を返しても返します。 FRAMモジュールによって送信されるデータ。