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

谁能向我解释以上两行试图做什么?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]

(这可能是首先编写代码的更清晰的方式)。

即它只是将两个相邻的寄存器值设置为 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,即分配给 所指向的位置pSpiTxBuf。然后它会递增pSpiTxBuf,因此它现在指向下一个位置。

第二个类似,但之后指针递减,所以它现在指向前一个位置。

于 2012-11-21T22:01:55.773 回答