07. april 2009 - 18:14Der er
3 kommentarer og 1 løsning
udskrive 'char' fra Linux seriel port(slackware)
Hej eksperter
Jeg er i gang med et projekt med at tilslutte en RFID læser på et Linux bord(slackware) som skal læse fra RFID'en. Softwaren laves i C på Linux platform. forbindelsen forgå via et serial-to-USB kabel. Ved at sende en char kode, for man et 'char' svar tilbage. (kablet er testet fra RFID scanner til java på min pc og giver svar tilbage)
Jeg er ikke særlig stærk i C samt linux og har en del problemer med at få det til at køre!? Jeg prøver i første omgang Kun at modtage et svar fra RFID læserne og udskrive det i mit konsol vindue.
Her er den C kode jeg har implementeret, men får bl.s secmantationsfejl!?
char c[9] = {2,0,4,16,6,0,0,18,3}; // char array til afsendelse char read = 0; //char til læsning fra seriel port
index = 0;
while (index < 10) { printf("echo # > /dev/ttyUSB0\n"); f1 = fopen("/dev/ttyUSB0", "r+"); //åben filen USB port til læse og skrive! printf("writing to ttyUSB0\n"); fwrite(c,sizeof(char),9,f1); //skriver til port sleep(2);
printf("reading to ttyUSB0\n"); while((read = fgetc(f1)) != EOF) //læs fil indtil 'End Of File' { printf("%2, \n", read); // udskriv input i console? } }
ok, for at kunne hjælpe effektivt skal du lave en liste med alle fejl, dvs. kopier fra compiler output og paste det ind her.
system("stty -F /devttyS0 9600"); //opsæt seriel port baud rate -- her mangler en /
det ser også mistænkeligt ud at du stty'er ttyS0 men åbner ttyUSB0.
Jeg foretrækker select når man skal vente på porte.
Du mangler at checke f1 (som Arnev skriver).
Når du får lavet noget mere af programmet skal du checke alle tildelinger til pointerer for NULL og alle påfyldninger af bufferer at de ikke laver bufferoverflow. generelt brug 'n' versionerne af standard funktionerne f.ex. snprintf istedet for sprintf etc.
struct termios options; // Get the current options for the port... tcgetattr(fd, &options); // Set the baud rates to 19200... cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); // Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.