我知道OCIE0A=0001
二进制,所以(1<<OCIE0A)
只是0010?我看到这个使用频率很高,将寄存器设置为(1<<OCIE0A)
的原因是什么,而不是直接将其设置为0010?什么是C中的(1 << OCIE0A)?
回答
从谷歌搜索的结果来看,它看起来像是控制“定时器/计数器中断屏蔽寄存器”中的“定时器/计数器输出比较匹配中断”*位的名称, 8位AVR单片机“*它的用法如下*:
TIMSK0 |= _BV(OCIE0A); // enable compare A interrupts
TIMSK0 &= ~_BV(OCIE0A); // disable compare A interrupts
哪里TIMSK0
是*定时器中断屏蔽寄存器*。 OCIE0A
是(对于熟悉AVR代码*的人)比TIMSK0 |= 2
更容易理解的标识符。
它们使用位标识符而不是掩码,因为任何halfwit编译器都可以将它们优化为位掩码相同的事物,但是从掩码→位更难*。因此,把它当作苦差事,对于所有用途来说都很容易和快速。
在不相关的说明中,数字是以二进制形式存储在计算机中的值。 “十进制”和“十六进制”是表示的那些值。所以不,OCIE0A不是“十六进制”。它是一个表示该位标志的偏移量,与1
*假设的价值无处不在的象征,我什么都不知道
+1用于研究工作。 –
作为嵌入式程序员,我完全同意。我讨厌阅读旧代码并发现'config_reg = 0x051C'。 “哦,我必须再次找到参考手册”。看到'config_reg = EN_FIFO |好多了EN_INT | WORD_SZ_8;” – AShelly
你的假设完全正确。也可以在这里看到更多关于该主题的内容:http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_use_bv –
- 1. 为什么(1 <1 <1)在C++中返回true?
- 2. C++中的“(”<<“)是什么意思?
- 3. 什么是<?=在C++中?
- 4. 什么是PHP中的“<<< SQL”?
- 5. C++中的运算符<< <>是什么?
- 6. C - 这是什么语法? <<
- 7. 1 << 32在Go中的含义是什么?
- 8. 这个C++代码是什么意思是“sol <?= f((1 << n)-1,i,0)+ abs(P [i])* price;”
- 9. 什么是Swift上的+++和<<<?
- 10. Ruby中的“<< - ”是什么意思?
- 11. 为什么在Java中System.out.println(-1 << 32)= - 1?
- 12. 这句话是什么(1个<< Y)的位运算
- 13. 这是什么“的#define BLABLABLA(1 << 2)平均
- 14. “<<”在C#中代表什么?
- 15. << =代表什么(在C中)?
- 16. “1000 << 16”中的“<<”是什么意思?
- 17. 是什么_ITERATOR_DEBUG_LEVEL = 1是什么意思?</p> <p>错误LNK2038:
- 18. -2 <1 = false。为什么?
- 19. Php <<<是什么意思?
- 20. 什么是C++中的“<<”运算符?
- 21. R:ABC <-c(1:15)对ABCD <-1:15
- 22. reinterpret_cast <char *>(&st)和(-1)* static_cast <int>是什么意思?
- 23. 什么是Java(1 << 2)这个表达式?
- 24. colnames(x [1])< - “name”和colnames(x)[1] < - “name”之间的区别是什么?
- 25. 是VAR | = 1 << 2; reverisble?
- 26. 什么是<NS0:什么?
- 27. “expect << - DONE”的含义是什么?
- 28. << - CONSTANT是做什么的?
- 29. <<< EOD在PHP中的用途是什么?
- 30. 什么是<#= #>
什么是'OCIE0A'?变量的名字? – Mysticial
@Mysticial十六进制。 – mugetsu
在十六进制中没有'I'。此外,它甚至不会接近'0001'。 – Mysticial