注释
成员
@Andy1978: 有趣的。这是在汇编代码中确认的行为吗? |
作者
@chamnit: 嗯,我看过生成的 asm 代码。我选择 gcode.c 是因为有 6 次真实出现(其他已注释)并使用 但是在深入研究差异之后,avr-libc FAQ 条目似乎不再正确,而 avr-gcc 在优化它方面做得非常好。我不得不承认,我上次测试常见问题解答中提到的这种行为是 6 年前,从那以后我自动转换为 uint8 before ~。 对不起噪音。 |
成员
@Andy1978: 没问题。感谢您检查此事。 |
在 nuts_bolts.h 第 57、60 行
定义 bit_false_atomic(x,mask) {uint8_t sreg = SREG; cli(); (x) &= ~(面具); SREG = sreg; }
定义 bit_false(x,mask) (x) &= ~(mask)
我认为我们应该首先转换为 uint8_t,如“(x) &= (uint8_t)~(mask);
请参阅 avr-libc FAQ“为什么编译器将使用按位运算符的 8 位运算编译为 16 位运算大会?” http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intpromote