У меня 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);
}
Со вторым параметром юникса read
вызов является буфером void *buf
Я не могу понять, как параметр result+sizeof(uint8_t)*PACKET_SIZE*j
разрешается в указатель местоположения в массиве result
,
Может кто-нибудь помочь объяснить, как это разрешается в расположение массива в result
?
result+sizeof(uint8_t)*PACKET_SIZE*j
такой же как &result[PACKET_SIZE*j]
какой адрес ячейки памяти у индекса PACKET_SIZE * j
в result
массив.
Читать этот
представьте, что ваш массив расположен в памяти следующим образом
packet 0:
[0]
..
[163]
packet 1:
[164]
..
[227]
packet 2:
[228]
...
Итак, адрес пакета 1 равен (размер пакета (164) * j (1)), где j — номер пакета.
sizeof unit8 будет определять количество необходимых байтов, в большинстве случаев «1».