在MDR32(类似于STM32)微控制器中,有一个16位的STAT寄存器来描述以太网状态,文档中说7..5位表示接收到的数据包的数量,我如何获得这个值并将其保存在uint16_t变量中?
发布于 2022-05-09 21:54:04
根据读取表示法的方式,从整数中获取第5、6和7位,您可以这样做:
auto ethStatus = (stat >> 5) & 7;发布于 2022-05-09 21:57:07
如果你把位右移5位,那么这5..7位将在0..2位置。如果按位,并且值为0b000000000000000111U(位掩码),那么位置3.15中的所有位将为0。这将使您在最不重要的位置上得到您想要的3位:
unsigned ethernet_status = (STAT >> 5U) & 0b0000000000000111U;您可以通过将1向左移动N-1并减去1,生成N个低位位的位掩码:
unsigned bit_first = 5;
unsigned bit_count = 3;
unsigned bit_mask = (1U << bit_count) - 1U;
unsigned ethernet_status = (STAT >> bit_first) & bit_mask;可以将值存储在如下变量中:
uint16_t variable = ethernet_status;https://stackoverflow.com/questions/72178546
复制相似问题