在 C 中确定 32 位掩码
Determining 32-bit Mask in C
我不是 C 程序员,但发现自己处于需要进行一些编码的情况。我正在使用 ADC 通过设备确定电压电平 运行,ADC 有 3 个通道(0、1、2)。我需要能够分别确定每个通道上的电压。我找到了一个允许我设置扫描通道的功能,但它需要一个掩码。我不知道这是怎么回事。以下是文档:
// Sets the channel mask void ADC_SetChanMask(uint32 mask) {...}
Parameter mask sets the channel that will be scanned. Setting bits for
channels that do not exist will have no effect. For example, if only 6
channels were enabled, setting a mask of 0x0103 would only enable the
last two channels (0 and 1).
Example: If the component is setup to sequence through 8 channels, a
mask of 0x000F would enable channels 0, 1, 2, and 3.
在我的代码中,我需要分别启用通道 0、1 和 2,但不能合并。如果我能得到一些帮助来理解它是如何工作的,那就太棒了!
channel 0, 1, 2, 3 ... 对应掩码 1 << channel
1, 2, 4, 8 ... 你可以通过将位与|
(按位或)运算符。
示例掩码 0x0103 对应于通道 0、1 和 8。由于只启用了 6 个通道,因此高位被忽略。
我不是 C 程序员,但发现自己处于需要进行一些编码的情况。我正在使用 ADC 通过设备确定电压电平 运行,ADC 有 3 个通道(0、1、2)。我需要能够分别确定每个通道上的电压。我找到了一个允许我设置扫描通道的功能,但它需要一个掩码。我不知道这是怎么回事。以下是文档:
// Sets the channel mask void ADC_SetChanMask(uint32 mask) {...}
Parameter mask sets the channel that will be scanned. Setting bits for channels that do not exist will have no effect. For example, if only 6 channels were enabled, setting a mask of 0x0103 would only enable the last two channels (0 and 1).
Example: If the component is setup to sequence through 8 channels, a mask of 0x000F would enable channels 0, 1, 2, and 3.
在我的代码中,我需要分别启用通道 0、1 和 2,但不能合并。如果我能得到一些帮助来理解它是如何工作的,那就太棒了!
channel 0, 1, 2, 3 ... 对应掩码 1 << channel
1, 2, 4, 8 ... 你可以通过将位与|
(按位或)运算符。
示例掩码 0x0103 对应于通道 0、1 和 8。由于只启用了 6 个通道,因此高位被忽略。