2017-06-25 31 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'。