【发布时间】:2020-05-22 14:47:28
【问题描述】:
我知道 -> 是一个指针 |= 是 OR。 这条线的逻辑意义是什么?
TIMER0->ROUTELOC0 |= TIMER_ROUTELOC0_CC0LOC_LOC15
【问题讨论】:
我知道 -> 是一个指针 |= 是 OR。 这条线的逻辑意义是什么?
TIMER0->ROUTELOC0 |= TIMER_ROUTELOC0_CC0LOC_LOC15
【问题讨论】:
|= 并不意味着 OR。 |表示或。
|= 类似于+=,即
A |= B 等价于 A = A |乙
所以回答你的问题:
看起来TIMER0 是一个具有成员ROUTELOC0 的结构。上面的表达式将ROUTELOC0 设置为ROUTELOC0 与TIMER_ROUTELOC0_CC0LOC_LOC15 进行或运算时的结果
【讨论】:
您正在对寄存器进行(设置)一个值的 ORing。您的处理器有一个带有寄存器 ROUTELOC0 的 TIMER0。它可能有一点是“CC0LOC_LOC15”
我建议您查看处理器的数据表,以了解具体含义。
【讨论】:
TIMER0->ROUTELOC0 = TIMER_ROUTELOC0_CC0LOC_LOC15;),您会无意中清除寄存器中的所有其他位。至于你为什么要设置它,我不知道你用的是什么处理器,所以我不能告诉你。
-> 是结构解引用运算符,|= 是按位或赋值 运算符(复合赋值)。
复合赋值:
x |= y ;
等价于:
x = x | y ;
这里重要的是要了解按位或 (|) 与布尔或 (||) 不同。此处用于设置x 中的特定位,而其他位未设置。
例如,要将x 的两个最低有效位设置为 1:
x: 10100000
y: 00000011
---------
x|y: 10100011
【讨论】: