我试图使用 C 设置寄存器中的第 46 位,其中 64 位宽。我该如何设置这个位?
目前我正在这样做:
uint32_t= address ;
uint64_t data =1ULL << 46;
打印这表明第 14 位正在设置。我什至无法设置第 32 位。如果我设置第 32 位,它会设置第 0 位。33 将设置第 1 位。看起来它在 0- 之后进行循环移位31 再次从 0 开始。
以 64 位宽注册。
知道如何设置这个位吗?
例如:
reg_addr.val = FEATURE_REG;
printf(stdout, "Programming enable at address %x=%llx\n",
reg_addr.val,reg_addr.val);
data.val = (1ULL << 46);
printf("Data value %llx\n",data.val);}
最佳答案
如果您使用类型作为 uint32_t 或 uint64_t 正确打印完成:
printf(stdout, "Programming enable at address %" PRIu32 "=%" PRIu64 "\n",reg_addr.addr, reg_addr.val);
假设 reg_addr.addr 是 uint32_t 类型,reg_addr.val 是 uint64_t 类型。
关于c - 如何在 64 位寄存器字段中设置第 45 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207611/