*pSpiTxBuf++ = CC2520_INS_SFLUSHRX; // get rid of this packet
*pSpiTxBuf-- = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]
谁能向我解释以上两行试图做什么?pSpiTxBuf
是一个uint8_t *
这相当于:
pSpiTxBuf[0] = CC2520_INS_SFLUSHRX; // get rid of this packet
pSpiTxBuf[1] = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]
(这可能是首先编写代码的更清晰的方式)。
即它只是将两个相邻的寄存器值设置为 CC2520_INS_SFLUSHRX。
递增和递减运算符在取消引用之前更改指针中的地址。因此,您在缓冲区中前进,然后更改新指向的单元格中的值。
放入一些括号以使其更清晰:
*(pSpiTxBuf++) = CC2520_INS_SFLUSHRX;
忽略++
,它是标准的指针引用和形式的赋值*p = q
。但是p
恰好其中有一个后增量运算符,这意味着,照常使用该值,但是在使用它之后,将其递增。
第一个是将值分配CC2520_INS_SFLUSHRX
给*pSpiTxBuf
,即分配给 所指向的位置pSpiTxBuf
。然后它会递增pSpiTxBuf
,因此它现在指向下一个位置。
第二个类似,但之后指针递减,所以它现在指向前一个位置。