仅分配位集的一部分,保持另一部分不可更改

时间:2018-04-05 18:44:57

标签: bitmap bit-manipulation bitset

预览

假设我们有一个寄存器 - 一些固定大小的0bXXXXXXXX二进制字。 接下来假设我们仅使用此注册表0bUUXXUUXX的某些部分(U表示“使用”,X表示“不注意”。)

例如,我在ATMega328上使用两个寄存器DDRDDDRB来控制seven-segment display。只要这些寄存器是8位寄存器并且显示器只有7个(我不使用点)引脚来控制这些寄存器的某些位是不可能的,我不想在控制显示时更改它们。所以我必须只操纵我需要的那些位并保持那些我不需要的那些位。到目前为止,我已达到以下解决方案。

解决方案

这是C代码(虽然没有那么多代码),但我认为这个想法与语言无关。

首先,我定义了一个部分掩码,强调将使用寄存器的哪些位。在我的情况下,寄存器是8位长度,我使用位[4:7]

#define      USE_MSK 0b11110000  //bits out of use are set to 0's here

然后,当我需要将我使用的位(即位[4:7])设置为1001时,我会

#define      CHANGE_TO 0b10011111 //bits out of use are set to 1's here

然后

register |= USE_MSK;
register &= CHANGE_TO;

实际上我使用临时变量来更改一个赋值中的寄存器。

问题是这里可以改进什么?或者它应该是一种不同的方式。欢迎任何评论家和/或建议。

0 个答案:

没有答案