de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 SensationSama
SensationSama
質問

なぜここでビット演算を行うのか?(SPI FRAM リード方法)

参照: https://github.com/adafruit/Adafruit_FRAM_SPI/blob/master/Adafruit_FRAM_SPI.cpp 以下のメソッドは、入力を読み込んで8ビットに変換するものです。その機能に関していくつか質問があります。

addr = 0xFFFF を例にとると、このメソッドは変数を 0xFF に変換しています。末尾からビットが削除されることは理解できますが、確かに65535 != 255です。おそらく、相対的に、その最大サイズに、しかし、これはどのように有用な変換ですか?私はここでビット単位について何かを見逃しているかもしれません...

uint8_t Adafruit_FRAM_SPI::read8 (uint16_t addr)
{
 digitalWrite(_cs, LOW);
 SPItransfer(OPCODE_READ); //read memory from fram array (2-byte)
 SPItransfer((uint8_t)(addr >> 8));
 SPItransfer((uint8_t)(addr & 0xFF));
 uint8_t x = SPItransfer(0);
 digitalWrite(_cs, HIGH);
 return x;
}

間違っていたら訂正してください、キャストは符号拡張が起こらないようにするためです。

マスキングは理論的には理解できますが、ここでの適用が全く理解できません。

最後に、いつも同じ値 x = 0 を返しますが、なぜですか?

また、書き込みメソッドはありますが、読み込みメソッドはありませんね。read8だけです。理由は?

1 2016-03-16T18:01:38+00:00 1
 SensationSama
SensationSama
編集された質問 21日 3月 2016 в 12:35
Arduino
c++
解決策・回答
Edgar Bonet
Edgar Bonet
16日 3月 2016 в 8:43
2016-03-16T20:43:04+00:00
さらに
ソース
編集
#40124186

仮に 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を受け取るので、暗黙的に行われることになります。 はuint8_tという引数を取るので、暗黙のうちに行われます。もしSPItransfer()` が 16 ビットでオーバーロードされていれば、このキャストは役に立つかもしれません。 が 16 ビットバージョンでオーバーロードされた場合、このキャストは役に立つかもしれません。

最後に、いつも同じ値 x = 0 を返しますが、なぜですか?

いいえ、SPItransfer(0);のコールが返すもの、つまりFRAMモジュールによって送られたデータを返します。 つまり、FRAMモジュールから送られたデータです。

3
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 15時間前
2
Hideo Nakagawa
登録済み 1日前
3
Sergiy Tytarenko
登録済み 3日前
4
shoxrux azadov
登録済み 5日前
5
Koreets Koreytsev
登録済み 1週間前
JA
© de-vraag :年
ソース
arduino.stackexchange.com
ライセンス cc by-sa 3.0 帰属