【发布时间】:2013-12-29 02:41:50
【问题描述】:
我正在尝试对某些硬件传输实施超时,以增加大型项目的安全性。我已经使用select 为UART 传输实现了超时,但我不知道如何在SPI 传输中添加超时。
这是我的阅读代码:
int spi_read(int fd, char command, char* buffer, int size, int timeout)
{
struct spi_ioc_transfer xfer[2];
int status;
memset(buffer, 0, sizeof(buffer));
memset(xfer, 0, sizeof(xfer));
xfer[0].tx_buf = (unsigned int)(&command);
xfer[0].len = 1;
xfer[1].rx_buf = (unsigned int)buffer;
xfer[1].len = size;
status = ioctl(fd, SPI_IOC_MESSAGE(2), xfer);
if(status < 0)
return NOERROR;
else
return EHWFAULT1;
}
它发送一个字节大小的命令并接收一定大小的响应(在半双工模式下)。如何在响应中实现超时?可以用select实现吗?我应该分开交易并使用select还是更好地使用警报?
然后,对于全双工模式,我也有同样的问题,这也是使用 ioctl 实现的。你能给我一些提示吗?
【问题讨论】: