STM32的位段操作很适合高效地处理这种情况。试试下面的算法,我没有测试过,不保证正确,但思路是正确的。
uint8_t src[4], result[8];
uint32_t temp, *psrc, *presult;
temp = (uint32_t)(&src - 0x22000000);
psrc = (uint32_t)(0x22000000 + (temp * 32)); // 得到src[0]的位段地址
temp = (uint32_t)(&result - 0x22000000);
presult = (uint32_t)(0x22000000 + (temp * 32)); // 得到result[0]的位段地址
for (temp = 0; temp < 8; temp++) {
result[temp] = 0; // 目标字节清0
presult[7] = psrc[0]; // 设置目标字节最高位 = 最低原数据字节位
presult[5] = psrc[8]; // 设置目标字节第5位 = 第2原数据字节位
presult[3] = psrc[16];// 设置目标字节第3位 = 第3原数据字节位
presult[1] = psrc[24];// 设置目标字节第1位 = 第4原数据字节位
presult += 8; // 指向下一个目标字节
psrc++; // 指向下一个原数据位
}
-
-
STM32_Bitband_Usage.GIF
(23.24 KB)