Я работаю над программой на C, которая будет работать в пространстве пользователя во встроенной системе ARM GNU / Linux.Мне нужно прочитать данные из узла устройства char / dev / fpga_sram.В программе на C буфер был выделен с использованием malloc, как показано ниже.
uint16_t *buff;
uint32_t num = 4194304 * 3;
buff = (uint16_t *)malloc(num * sizeof(uint16_t));
Используя функцию read (), я хотел бы прочитать данные в определенный индекс буфера, как показано вфрагмент кода ниже.
int ret;
int fd;
int ptr_loc;
ptr_loc = 0;
fd = open("/dev/fpga_sram", O_RDONLY);
ret = read(fd, &(buff[ptr_loc]), 4194304 * sizeof(uint16_t));
close(fd);
Причина, по которой я хочу это сделать, заключается в том, что буфер должен заполняться различными чтениями из узла устройства / dev / fpga_sram в разное время.Размер буфера больше, чем общее число прочитанных байтов, поэтому я ожидал бы присвоить ptr_loc другому индексу, как показано ниже.
ptr_loc = 4194304;
fd = open("/dev/fpga_sram", O_RDONLY);
ret = read(fd, &(buff[ptr_loc]), 4194304 * sizeof(uint16_t));
close(fd);
Однако, когда я пытаюсь получить доступ к данным, хранящимся в буфере, яполучить сообщение об ошибке:
printf("i = 0, data = %u\n", buff[0]); // this line of code causes segfault
Что я здесь не так делаю, и можно ли прочитать с узла устройства указатель на местоположение буфера?Я предполагаю, что чтение из узла устройства будет похоже на чтение из файла в GNU / Linux.