51uwb.cn

 找回密码
 立即注册
查看: 3591|回复: 2
打印 上一主题 下一主题

代码中的一个while循环(轮询接收帧)理解不了,望各位前辈指教

[复制链接]

3

主题

15

帖子

40

积分

新手上路

Rank: 1

积分
40
跳转到指定楼层
楼主
发表于 2020-7-19 15:23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))
      { };

这个while循环理解不了,括号里面会出现1或0吗?


下面是这个函数原型  
#define SYS_STATUS_ID           0x0F           
#definedwt_read32bitreg(x)        dwt_read32bitoffsetreg(x,0)
uint32dwt_read32bitoffsetreg(int regFileID,int regOffset)
{
    uint32 regval = DWT_ERROR ;
    int    j ;
    uint8  buffer[4] ;
    int result =dwt_readfromdevice(regFileID,regOffset,4,buffer); // Read 4 bytes (32-bits)register into buffer
    if(result == DWT_SUCCESS)
    {
        for (j = 3 ; j >= 0 ; j --)
        {
            regval = (regval << 8) +buffer[j] ;
        }
    }
    return regval ;
}

回复

使用道具 举报

2

主题

58

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
发表于 2020-7-19 16:01:36 | 只看该作者
这个表达式,你得分开解读,
!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))

去掉!运算符,
(status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)

这就是一个按位与表达式,左侧为
status_reg = dwt_read32bitreg(SYS_STATUS_ID),
右侧为
SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR

右侧就是一个包括SYS_STATUS_RXFCG和SYS_STATUS_ALL_RX_ERR的掩码,左侧为一个赋值语句,把dwt_read32bitreg(SYS_STATUS_ID)的返回值赋给status_reg,最后结果为status_reg的值

简言之,该语句表达了把dwt_read32bitreg(SYS_STATUS_ID)的返回值与掩码SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR进行按位或,1). 如果结果不为零,取反后为假,while退出,2). 如果结果为零,取反后为真,while循环继续执行
回复

使用道具 举报

3

主题

15

帖子

40

积分

新手上路

Rank: 1

积分
40
板凳
 楼主| 发表于 2020-7-21 09:41:43 | 只看该作者
uwb 发表于 2020-7-19 16:01
这个表达式,你得分开解读,
!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | S ...

  刚开始不明白什么是掩码,查了一下,加上你的讲解,现在理解了这个语句
非常感谢  
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-4-29 01:32 , Processed in 0.011003 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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