我想知道是否可以使用C中的一个句子打开多个寄存器中的第1位。 我得到了灵感here。我通常会在2个寄存器寄存器中打开第1位,如下所示:
#define REG_NAME1 (*((volatile unsigned int *) 0x130031D4))
#define REG_NAME1 (*((volatile unsigned int *) 0x130031D4))
#define BIT1 0x1
REG_NAME1 |= 0x1;
REG_NAME2 |= 0x1;
但在这里我使用了2个句子。我怎么做1?我只是好奇。
最诚挚的问候!
答案 0 :(得分:3)
这是代码混淆的烦恼,但是:
REG_NAME1 |= (REG_NAME2 |= BIT1) & BIT1;
答案 1 :(得分:1)
逗号运算符怎么样:
REG_NAME1 |= 0x1, REG_NAME2 |= 0x1;
还有两个表达式(你无法逃脱)但只有一个陈述。
答案 2 :(得分:1)
如果寄存器相邻,则可以使用两个大小的类型的单个寄存器,并将其写入一个语句中。
假设unsigned int是32位且unsigned long long是64位:
#define REG_NAME1_NAME2 (*((volatile unsigned long long*) 0x130031D4))
REG_NAME1_NAME2 |= 0x0000000100000001ULL ;
当然,如果这些类型的尺寸不符合规定,则位掩码必须不同。我强烈建议您在任何情况下都使用诸如uint32_t和uint64_t之类的C99类型。