野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12488|回复: 0

关于407 霸道开发板循环串口例程

[复制链接]
发表于 2021-10-27 16:26:21 | 显示全部楼层 |阅读模式
日前正在学习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)];
}
怎么具体理解这段代码?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 10:38 , Processed in 0.032963 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表