51uwb.cn

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

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

[复制链接]

2

主题

58

帖子

254

积分

中级会员

Rank: 3Rank: 3

积分
254
楼主
发表于 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循环继续执行
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-5-13 21:09 , Processed in 0.010193 second(s), 5 queries , File On.

Powered by Discuz! X3.3

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

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