小学生
最后登录1970-1-1
在线时间 小时
注册时间2021-8-31
|
日前正在学习407 霸道开发板循环串口例程,不明白例程里的很多函数实现方法。在论坛中看到了 杰杰的循环缓冲串口的实现方法,是完全弄明白的。但例程的这个讲解的不太细致,真是看不明白,请问咱们407 霸道开发板循环串口例程有没有详细一点的说明,求推荐,《零死角玩转STM32》里没有这个内容。还请帮忙指点下。
int cbIsFull(QueueBuffer *cb)
{
return cb->write == (cb->read ^ cb->size); /* This inverts the most significant bit of read before comparison */
}
这个判断是否缓冲区满 为什么这么实现?
int cbIncr(QueueBuffer *cb, int p)
{
return (p + 1)&(2*cb->size-1); /* read and write pointers incrementation is done modulo 2*size */
}
这个指针加1后 和后面的按位与是为什么?
QUEUE_DATA_TYPE* cbWrite(QueueBuffer *cb)
{
if (cbIsFull(cb)) /* full, overwrite moves read pointer */
{
return NULL;
}
else
{
//µ±wrietºÍwrite_usingÏàµÈʱ£¬±íʾÉÏÒ»¸ö»º³åÇøÒÑдÈëÍê±Ï£¬ÐèÒª¶ÔдָÕë¼Ó1
if(cb->write == cb->write_using)
{
cb->write_using = cbIncr(cb, cb->write); //δÂú£¬ÔòÔö¼Ó1
}
}
return cb->elems[cb->write_using&(cb->size-1)];
}
怎么具体理解这段代码?
|
|