我正在使用这样的结构通过 spidev 传输一些数据
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx, // transferred
.rx_buf = (unsigned long)rx, // received
.len = ARRAY_SIZE(tx),
.delay_usecs = delay,
.speed_hz = speed,
.bits_per_word = bits,
};
我要发送的数据是uint8_t tx[] = {0xAC, 0xDC}
所以我像这样转换数组: msg.tx_buf = (unsigned long)tx;
但这不利于可移植性,而且它依赖于字节序。 有没有更好、更快的方法来做到这一点? 我还需要比较 msg.tx_buf 和 msg.rx_buf 的值以确保该值写入正确。
谢谢
最佳答案
如果您的“spidev”期望发送 32 位字(bits
为 32),那么您需要重新排列内存中的数据以正确布局。
你需要做:
const uint32_t tx32[] = { tx[0], tx[1] };
然后将.tx_buf
值设置为tx32
,假设它想要发送数据的地址。请记住确保 .len
正确设置为 2。
关于C++ 将 uint8_t 转换为 unsigned long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18654013/