我知道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. 「cout <<(_ 1 * 3)」是什麼意思?
- 4. 什麼是<?=在C++中?
- 5. 什麼是PHP中的「<<< SQL」?
- 6. C++中的運算符<< <>是什麼?
- 7. C - 這是什麼語法? <<
- 8. 1 << 32在Go中的含義是什麼?
- 9. 爲什麼輸出cout << setprecision(2)<< 0.999是1而不是1.0?
- 10. THREE.Camera.prototype.lookAt</ <() -</ <是什麼意思?
- 11. 這個C++代碼是什麼意思是「sol <?= f((1 << n)-1,i,0)+ abs(P [i])* price;」
- 12. 爲什麼「UInt64(1 << 63)」崩潰?
- 13. 爲什麼3758096384 << 1給予768
- 14. 什麼是Swift上的+++和<<<?
- 15. 什麼是代碼中的「<< - 」?
- 16. Ruby中的「<< - 」是什麼意思?
- 17. Java中`<< ='的用途是什麼?
- 18. 什麼是我的檔案中的「<<<<<<< head」?
- 19. wcout << L是什麼?
- 20. 爲什麼在Java中System.out.println(-1 << 32)= - 1?
- 21. << =代表什麼(在C中)?
- 22. 「<<」在C#中代表什麼?
- 23. 這句話是什麼(1個<< Y)的位運算
- 24. 這是什麼「的#define BLABLABLA(1 << 2)平均
- 25. 是什麼_ITERATOR_DEBUG_LEVEL = 1是什麼意思?</p> <p>錯誤LNK2038:
- 26. 「1000 << 16」中的「<<」是什麼意思?
- 27. -2 <1 = false。爲什麼?
- 28. 這是什麼算子<<< bash
- 29. Php <<<是什麼意思?
- 30. 什麼是C++中的「<<」運算符?
什麼是'OCIE0A'?變量的名字? – Mysticial
@Mysticial十六進制。 – mugetsu
在十六進制中沒有'I'。此外,它甚至不會接近'0001'。 – Mysticial