2017-06-25 29 views
0

我有一个Raspberry-pi 3,我试图与FLIR Lepton热成像摄像机连接。虽然我理解这个接口是如何工作的,但我有一个关于SPI read命令的问题。以下是代码片段。完整的源可在githubUnix读取缓冲区参数

#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阵列位置?

回答

2

result+sizeof(uint8_t)*PACKET_SIZE*j&result[PACKET_SIZE*j]相同,该地址在result阵列中的索引​​处的存储器位置。

阅读this

1

想象阵列中存储器被分配作为下列

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

所以,分组1的地址是(该分组的大小(164)*∫(1)),其中j是分组号码。 sizeof unit8将解决所需的字节数,大多数情况下为'1'。