Параметр буфера чтения Unix

У меня 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?

0

Решение

result+sizeof(uint8_t)*PACKET_SIZE*j такой же как &result[PACKET_SIZE*j]какой адрес ячейки памяти у индекса PACKET_SIZE * j в result массив.

Читать этот

2

Другие решения

представьте, что ваш массив расположен в памяти следующим образом

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

Итак, адрес пакета 1 равен (размер пакета (164) * j (1)), где j — номер пакета.
sizeof unit8 будет определять количество необходимых байтов, в большинстве случаев «1».

1

По вопросам рекламы [email protected]