& quot; Не удалось открыть файлы устройств Xillybus при запуске хост-приложения на zedboard с Xillinux

Я пишу код, где я должен читать из входных файлов, а затем читать вывод. Один из файлов большой и около 38 MB, Я не очень хорош в программировании, поэтому, глядя на некоторые учебники и xillybux Руководство по программированию, я написал следующий код, чтобы прочитать из двух файлов, записать их в логику, а затем прочитать их. Мой мотив — рассчитать время чтения и записи для моего будущего проекта. Но когда я пытаюсь запустить программу, я получаю следующую ошибку

Failed to open Xillybus device file(s), device resource busy

Я не знаю, что я сделал неправильно. Код, который я написал ниже

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdint.h>
#include <sys/time.h>
#include <math.h>
#include <string>
#include <cstdlib>

#define N ((cols+1)*rows + cols)

int main(int argc, char *argv[])
{
int fdr, fdw;
FILE *ftime_rw;
FILE *fp;
FILE *U, *V, *RI;
int rc, donebytes;
int *tologic, *fromlogic;
pid_t pid;
int i,j;
struct timeval tv1, tv2;
double time_rw;
char *buf;
int temp;
int rows= 575;
int cols= 18689;

fdr = open("/dev/xillybus_read_32", O_RDONLY);
fdw = open("/dev/xillybus_write_32", O_WRONLY);

if ((fdr < 0) || (fdw < 0))
{
perror("Failed to open Xillybus device file(s)");
exit(1);
}

U = fopen("U.txt", "r");
V = fopen("V.txt", "r");
RI = fopen("RI.txt", "a");

if(U==NULL || V==NULL || RI==NULL )
{
printf("Write in their respective files!\n");
exit(1);
}

for (i=0; i<rows; i++) // Read
{
fscanf(U,"%d", &temp);
fprintf(RI,"%d\n", temp);
}

for(j=0; j<rows; j++)
{
for (i=0; i<cols; i++) // Read
{
fscanf(V,"%d", &temp);
fprintf(RI,"%d ", temp);
}

fclose(U);
fclose(V);
fclose(RI);tologic = (int*)malloc(sizeof(int)* N);

if (!tologic)
{
fprintf(stderr, "failed to allocate memory\n");
exit(1);
}
RI = fopen("RI.txt", "r");

for(j=0; j<rows; j++)
{
for (i=0; i<cols; i++)
fscanf(RI,"%d", &tologic[N]);

fclose(RI);

pid = fork();  // writer + reader

if (pid < 0)
{
perror("Failed to fork()");
exit(1);
}

if (pid) // writer process
{
close(fdr);
buf = (char *)tologic;
donebytes=0;

gettimeofday(&tv1, NULL);  // start count time

while (donebytes < sizeof(int)*N)  // write N integers
{
rc = write(fdw, tologic + donebytes, sizeof(int)*N - donebytes);

if ((rc < 0) && (errno == EINTR))
continue;

if (rc <= 0)
{
perror("write() failed");
exit(1);
}

donebytes += rc;
}
gettimeofday(&tv2, NULL);  // stop count time

time_rw = (double) (tv2.tv_usec-tv1.tv_usec);

printf("Writer. Total time = %f usec\n", time_rw);

if(close(fdw)==-1)
printf("ERROR closing write_32 file!\n");

return 0;
}
else  // reader process
{
close(fdw);
fromlogic =(int*)malloc(sizeof(int)* N);

if (! fromlogic)
{
fprintf(stderr, "failed to allocate memory\n");
exit(1);
}
buf = (char *)fromlogic;
donebytes = 0;

donebytes = 0;

gettimeofday(&tv1, NULL);  // start count time

while (donebytes < sizeof(int)*rows)  // read num_rows integers
{
rc = read(fdr, fromlogic + donebytes, sizeof(int)*rows - donebytes);

if ((rc < 0) && (errno == EINTR))
continue;

if (rc < 0)
{
perror("read() failed");
exit(1);
}

if (rc == 0)
{
fprintf(stderr, "Reached read EOF!? Should never happen.\n");
exit(0);
}

donebytes += rc;
}

gettimeofday(&tv2, NULL);  // stop count time

time_rw = (double) (tv2.tv_usec-tv1.tv_usec);

printf("Reader. Total time = %f usec\n", time_rw);

for (i=0; i<rows; i++)  // Integers read from logic
printf("Reader process : %d\n", fromlogic[i]);

sleep(1); // Let debug output drain (if used)

if(close(fdr)==-1)
printf("ERROR closing read_32 file!\n");

return 0;
}
}
}
}

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

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