Unix 读取缓冲区参数
Unix Read Buffer Parameter
我有一个 Raspberry-pi 3,我正在尝试将其与 FLIR Lepton 热像仪连接。虽然我了解此接口的工作原理,但我对 SPI read
命令有疑问。下面是代码片段。可以在 github
找到完整的源代码
#define PACKET_SIZE 164
#define PACKET_SIZE_UINT16 (PACKET_SIZE/2) //82
#define PACKETS_PER_FRAME 60
#define FRAME_SIZE_UINT16 (PACKET_SIZE_UINT16*PACKETS_PER_FRAME) //4920
uint8_t result[PACKET_SIZE*PACKETS_PER_FRAME]; //9840
for(int j=0;j<PACKETS_PER_FRAME;j++) {
read(spi_cs0_fd, result+sizeof(uint8_t)*PACKET_SIZE*j, sizeof(uint8_t)*PACKET_SIZE);
}
由于 unix read
调用的第二个参数是缓冲区 void *buf
,我无法弄清楚参数 result+sizeof(uint8_t)*PACKET_SIZE*j
如何解析为数组中某个位置的指针 result
.
谁能帮忙解释一下这是如何解析成 result
中的数组位置的?
result+sizeof(uint8_t)*PACKET_SIZE*j
与 &result[PACKET_SIZE*j]
相同,即 result
数组中索引 PACKET_SIZE * j
处的内存位置地址。
阅读this
假设你的数组在内存中分配如下
packet 0:
[0]
..
[163]
packet 1:
[164]
..
[227]
packet 2:
[228]
...
因此,数据包 1 的地址为(数据包大小 (164) * j(1)),其中 j 是数据包编号。
sizeof unit8 将解析为所需的字节数,在大多数情况下为“1”。
我有一个 Raspberry-pi 3,我正在尝试将其与 FLIR Lepton 热像仪连接。虽然我了解此接口的工作原理,但我对 SPI read
命令有疑问。下面是代码片段。可以在 github
#define PACKET_SIZE 164
#define PACKET_SIZE_UINT16 (PACKET_SIZE/2) //82
#define PACKETS_PER_FRAME 60
#define FRAME_SIZE_UINT16 (PACKET_SIZE_UINT16*PACKETS_PER_FRAME) //4920
uint8_t result[PACKET_SIZE*PACKETS_PER_FRAME]; //9840
for(int j=0;j<PACKETS_PER_FRAME;j++) {
read(spi_cs0_fd, result+sizeof(uint8_t)*PACKET_SIZE*j, sizeof(uint8_t)*PACKET_SIZE);
}
由于 unix read
调用的第二个参数是缓冲区 void *buf
,我无法弄清楚参数 result+sizeof(uint8_t)*PACKET_SIZE*j
如何解析为数组中某个位置的指针 result
.
谁能帮忙解释一下这是如何解析成 result
中的数组位置的?
result+sizeof(uint8_t)*PACKET_SIZE*j
与 &result[PACKET_SIZE*j]
相同,即 result
数组中索引 PACKET_SIZE * j
处的内存位置地址。
阅读this
假设你的数组在内存中分配如下
packet 0:
[0]
..
[163]
packet 1:
[164]
..
[227]
packet 2:
[228]
...
因此,数据包 1 的地址为(数据包大小 (164) * j(1)),其中 j 是数据包编号。 sizeof unit8 将解析为所需的字节数,在大多数情况下为“1”。