pBufIn = (uint8_t *)pIsrIn->buf;
shmemDev->isr |= pBufIn[pIsrIn->bufRdPtr & (pIsrIn->bufLen - 1U)];
请问上面这个语句是在干哈?
pBufIn 数组的首地址然后又是数组下标pIsrIn->bufRdPtr & (pIsrIn->bufLen - 1U), pIsrIn->bufRdPtr读指针和pIsrIn->bufLen - 1U 与是什么意思呢?
把pIsrIn->buf的值赋给pBufIn,然后取pIsrIn->bufRdPtr 和pIsrIn->bufLen - 1U值做与操作,最后与shmemDev->isr做或操作,把值赋给shmemDev->isr
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
首先对pIsrIn->buf进行uint8_t *类型强制转换,将转换值赋给pBufIn
shmemDev->isr |= pBufIn[pIsrIn->bufRdPtr & (pIsrIn->bufLen - 1U)]这个语句中间的运算符是|=,是一个复合运算符,先不看。
先看右边,右边有个[]括号,先看括号里面的,大括号里面的是pIsrIn->bufRdPtr & (pIsrIn->bufLen - 1U),&是按位与运算符,即将左右两个值进行按位与运算(具体怎么运算题主自行百度吧),然后将所得的结果作为pBufln的下标,相当于数组里面的a[1]这种。
复合运算符右边算完了,再把运算符拆开来看,就是shmemDev->isr = shmemDev->isr | pBufln[前面的结果],即将两个值进行或运算,再把结果赋给shmemDev->isr。
复合运算符的实质就是a += b 即 a = a + (b)