Unix读缓冲区参数

时间:2017-06-25 15:52:47

标签: c++ unix raspberry-pi spi

我有一个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如何解析为数组{{1}中某个位置的指针}}

是否有人可以帮助解释这如何解析为result中的数组位置?

2 个答案:

答案 0 :(得分:2)

result+sizeof(uint8_t)*PACKET_SIZE*j&result[PACKET_SIZE*j]相同,PACKET_SIZE * j数组中索引result的内存位置地址。

阅读this

答案 1 :(得分:1)

假设您的数组在内存中分配如下

packet 0:
  [0]
  ..
  [163]
packet 1:
  [164]
  ..
  [227]
packet 2:
  [228]
   ...

因此,分组1的地址是(分组的大小(164)* j(1)),其中j是分组号。 sizeof unit8将解决所需的字节数,在大多数情况下为“1”。