我有一个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
中的数组位置?
答案 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”。