在 C 中,如果我们有一个结构定义为
struct PortBreg {
unsigned int B0 :1;
unsigned int B1 :1;
unsigned int B2 :1;
unsigned int B3 :1;
unsigned int B4 :1;
unsigned int B5 :1;
unsigned int B6 :1;
unsigned int B7 :1;
};
#define Breg (*(volatile struct PortBreg *)(0x38)),
如果我想从端口 B 的位 B3 读取值并将值写入端口 B 的位 B2,我可以这样做吗
int i=Breg.B3; //to read
Breg.B2=i; //to write ?
最佳答案
这可能取决于端口是否可读和可写,但对于普通变量,此代码有效:将 B3 复制到 B2。请与您的类型保持一致,int i
不是 unsigned int i
。另请注意,我以通常的顺序打印每个成员,但实际端口读取的结构定义可能需要反转,因此 B7 是第一个。
#include <stdio.h>
struct PortBreg {
unsigned int B0 :1;
unsigned int B1 :1;
unsigned int B2 :1;
unsigned int B3 :1;
unsigned int B4 :1;
unsigned int B5 :1;
unsigned int B6 :1;
unsigned int B7 :1;
};
void show(struct PortBreg Qreg)
// bit order MSB -> LSB
{
printf("%u%u%u%u%u%u%u%u\n",
Qreg.B7, Qreg.B6, Qreg.B5, Qreg.B4, Qreg.B3, Qreg.B2, Qreg.B1, Qreg.B0);
}
int main(void)
{
struct PortBreg Breg = {0, 0, 0, 1,};
unsigned i;
show(Breg);
i = Breg.B3;
Breg.B2 = i;
show(Breg);
return 0;
}
程序输出:
00001000 00001100
关于c - 从结构中读取/写入位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249904/