如何在C for Cortex中将单字节转换为字?

| 在不使用typedef并集的情况下,在C中是否有Cortex-M0的工作宏,它将字节数据复制到31到23之间的字中。 我已经从spi接收到数据,需要将这些数据复制到word中。 SRAM不支持位操作,因此我使用“如何设置,清除和切换C中的单个位?”,但是字节呢? 谢谢 里西     
已邀请:
        尝试这个
word &= ~0xFF800000U; /* clear bits 23 - 31; thanks to Igor Skochinsky */
word |= ((byte << 23) & 0xFF800000U);
它将(9位)“ 1”的值移位23位,并用“ 3”中的值将其“ 2”移位,确保仅影响23-31位。     
        pmg的答案仅在前9位已经为零的情况下有效。如果设置了一些位,您的数据将与它们进行“或”运算。因此,请确保您首先需要清除这些位:
#define POS   23          // position at which to insert data
#define MASK  ((1UL<<9)-1)  // mask of nine 1s

word = (word & ~(MASK<<POS)) | ((data9 & MASK) << POS));
第一部分将掩码移到目标位置,然后将其反转,因此目标的最高位将为零,其余字词将为零,因此AND操作将清除最高的9位并保留低位不变。第二部分将确保只设置9位,然后将它们移到目标位置。最后,这两个部分将与“或”运算结合在一起,并且由于屏蔽,它们将不会相互干扰。     
        专门针对一个字节,可以使用汇编指令 UXTB从寄存器中提取位0-7,然后是 LSLS将其向左移动到所需位置。 当然,您也需要执行加载和存储操作。但是您已经知道了。     

要回复问题请先登录注册