【发布时间】:2020-12-17 15:37:22
【问题描述】:
为了安全地调整我使用的寄存器中的位:
DDRA |= 0b01100000;
DDRA &= 0b01111111;
- 第一行将第 5 位和第 6 位设置为 TRUE,无论其当前状态如何,并且不会影响其他位
- 第二行将设置第 7 位 FALSE,无论其当前状态如何,不会影响其他位
如何简化这两个操作?
【问题讨论】:
-
为什么你认为这不是最简单的代码?
-
如果您希望在一次写入中设置所有数据方向位 5,6,7,那么您可以使用
DDRA = (DDRA & 0b00011111) | 0b01100000; -
@EOF 因为可能有一种我不知道的更简单的写法
-
你不能再简化它们了。
-
@Luc 在 c 中没有(基本上)更好的写法。在某些处理器架构上,存在三元向量逻辑运算(ARM 有
vbsl和朋友,x86-64 AVX512 有vpternlog),可以在单个处理器指令中执行此操作,但仅限于向量寄存器。此外,在任何相当现代的处理器上,只要编译器至少具备最低限度的能力,c 版本就会很快。