找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1118|回复: 10
收起左侧

新手小白求解这个单片机C语言程序wptr &= 0x0f;是段什么意思?

[复制链接]
ID:1008209 发表于 2023-8-26 21:00 | 显示全部楼层 |阅读模式
void UART1_Isr() interrupt 4 using 1
{
    if (TI)                   // 发送中断标志位判断
    {
        TI = 0;               // 清中断标志
                busy = 0;             // 发送标志位置0,表示满足发送条件
        LED0 = !LED0;         // 测试端口
    }
    if (RI)                   // 接收中断标志位判断
    {
        RI = 0;               // 清中断标志
        LED1 = !LED1;         // 测试端口
                buffer[wptr++] = SBUF;
                wptr &= 0x0f;
    }
}

这个wptr &= 0x0f;是段什么意思?
回复

使用道具 举报

ID:1085441 发表于 2023-8-26 23:15 | 显示全部楼层
wptr = wptr & 0x0f;
回复

使用道具 举报

ID:1088185 发表于 2023-8-27 00:08 | 显示全部楼层
让wptr在0至0x0F之间循环
回复

使用道具 举报

ID:277531 发表于 2023-8-27 06:55 | 显示全部楼层
这个我也想问一下,为什么这样?
回复

使用道具 举报

ID:277531 发表于 2023-8-27 06:58 | 显示全部楼层
也想知道是什么意思?
回复

使用道具 举报

ID:155507 发表于 2023-8-27 09:50 | 显示全部楼层
mdj-fish 发表于 2023-8-27 06:55
这个我也想问一下,为什么这样?

buffer[16] 是串口的缓冲区,长度是16个字节
是一个循环缓冲区(circular buffer)
循环缓冲区或环形缓冲区是一种数据结构,它使用单个固定大小的缓冲区,就好像它是端到端连接的一样。
这个 wptr &= 0x0f; 的意思是 让wptr在0至0x0F之间循环
回复

使用道具 举报

ID:631850 发表于 2023-8-27 10:15 | 显示全部楼层
angmall 发表于 2023-8-27 09:50
buffer[16] 是串口的缓冲区,长度是16个字节
是一个循环缓冲区(circular buffer)
循环缓冲区或环形缓冲 ...

谢谢解释   又学习了一下
回复

使用道具 举报

ID:230500 发表于 2023-8-27 10:25 | 显示全部楼层
wptr &= 0x0f 相当于 wptr = wptr & 0x0f ;
假设WPTR= 1010 1010  和0x0F相与 结果就是 0000 1010
就是把WPTR控制在0x0F之内,不会超出这个数据长度!
回复

使用道具 举报

ID:647261 发表于 2023-8-28 08:52 | 显示全部楼层
可以改成if(wptr == 16) wptr=0;
这样是不是更好理解
回复

使用道具 举报

ID:1034262 发表于 2023-8-28 11:09 | 显示全部楼层
将高4位清零,低4位保持不变。
回复

使用道具 举报

ID:1040201 发表于 2023-8-28 16:12 | 显示全部楼层
wptr = wptr & 0x0f;把wptr 将高4位清零,低4位保持不变。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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