这段代码在ATmega2560上运行,那么这两者之间的区别是什么:
while(UCSR0A & 0b00100000 == 0); // check UDRE0 bit if it is 1
和
loop_until_bit_is_set(UCSR0A, UDRE0);
你可以看到这是用于UART传输,但是如果我使用第一个,我无法在终端上获得所需的输出,例如,如果我printf("Hello world\n");
实际的终端显示是:{{ 1}}。然而后者有效。您可以在HeHeHe......
。
答案 0 :(得分:3)
==
的优先级高于&
;另外,无需检查== 0
- 您应该尝试
while(!(UCSR0A & 0b00100000));
或者更确切地说,使用位宏
while(!(UCSR0A & _BV(UDRE0)));
代替。