我不太确定我的代码,并希望改进它。
我从SPI(8位通信)接收一些数据并将其存储到8位缓冲区中。要使用它,我想使用32位字。我知道我的第一个代码可行,但我不确定第二个代码,有人可以确认吗?
uint8_t *regData[5];
spi_xfer(fd, "\x24\xFF\xFF\xFF\xCC", 5, regData, 5);
uint32_t regVal;
regVal = (regData[0]);
regVal += (uint32_t)(regData[1]) << 8;
regVal += (uint32_t)(regData[2]) << 16;
regVal += (uint32_t)(regData[3]) << 24;
第二个:
uint8_t *regData[5];
spi_xfer(fd, "\x24\xFF\xFF\xFF\xCC", 5, regData, 5);
uint32_t regVal;
regVal = (regData[0]) | (uint32_t)(regData[1]) << 8 | (uint32_t)(regData[2]) << 16 | (uint32_t)(regData[3]) << 24;
非常感谢你的帮助!
圣布里厄
答案 0 :(得分:1)
uint8_t *regData[5];
regData[]
是一个指针数组。如果是这样,要检索存储在数组中指针的值,您需要dereference the pointer。
regVal = *(regData[0]);
否则,操作会将regData[0]
中存储的地址分配给regVal
,而不是存储在地址中的值。