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”。