2
*pSpiTxBuf++ = CC2520_INS_SFLUSHRX; // get rid of this packet
*pSpiTxBuf-- = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]

上記の2行が何をしようとしているのか、誰か説明してもらえますか? pSpiTxBufですuint8_t *

4

3 に答える 3

6

これは次と同等です。

pSpiTxBuf[0] = CC2520_INS_SFLUSHRX; // get rid of this packet
pSpiTxBuf[1] = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]

(これはおそらく、そもそもコードを書くためのより明確な方法だったでしょう)。

つまり、2つの隣接するレジスタ値をCC2520_INS_SFLUSHRXに設定するだけです。

于 2012-11-21T22:02:35.213 に答える
2

インクリメント演算子とデクリメント演算子は、逆参照の前にポインターのアドレスを変更します。したがって、バッファを進めて、新しくポイントされたセルの値を変更します。

于 2012-11-21T22:01:13.940 に答える
2

わかりやすくするためにいくつかの括弧を入れます:

*(pSpiTxBuf++) = CC2520_INS_SFLUSHRX;

を無視する++と、それは標準的なポインターの参照とフォームの代入です*p = q。ただし、pたまたまポストインクリメント演算子が含まれています。つまり、通常どおり値を使用しますが、使用した後はインクリメントします。

CC2520_INS_SFLUSHRX最初のものは、値を*pSpiTxBuf、つまり が指す位置に代入していますpSpiTxBufpSpiTxBufその後、次の位置を指すようにインクリメントされます。

2 番目のものは似ていますが、後でポインターをデクリメントするため、前の位置を指すようになります。

于 2012-11-21T22:01:55.773 に答える