*pSpiTxBuf++ = CC2520_INS_SFLUSHRX; // get rid of this packet
*pSpiTxBuf-- = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]
任何人都可以向我解释上述两条线正在尝试做什么吗? pSpiTxBuf
是uint8_t *
答案 0 :(得分:6)
这相当于:
pSpiTxBuf[0] = CC2520_INS_SFLUSHRX; // get rid of this packet
pSpiTxBuf[1] = CC2520_INS_SFLUSHRX; // double flush [CC2520 Bug#1]
(这可能是一个更清晰的方式来编写代码)。
即。它只是将两个相邻的寄存器值设置为CC2520_INS_SFLUSHRX。
答案 1 :(得分:2)
递增和递减运算符在取消引用之前更改指针中的地址。 所以你在缓冲区中前进,然后改变新指向的单元格中的值。
答案 2 :(得分:2)
放入一些括号以使其更清晰:
*(pSpiTxBuf++) = CC2520_INS_SFLUSHRX;
忽略++
,它是标准指针deference和*p = q
形式的赋值。但是p
碰巧有一个后增量运算符,这意味着,正常使用该值,但在使用它之后,增加它。
第一个是将值CC2520_INS_SFLUSHRX
分配给*pSpiTxBuf
,即pSpiTxBuf
指向指向的位置。然后递增pSpiTxBuf
,使其现在指向下一个位置。
第二个是类似的,但之后递减指针,所以它现在指向前一个位置。