微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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将其向左移动到所需位置。 当然,您也需要执行加载和存储操作。但是您已经知道了。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。