2016-08-04 8 views
1

Ich verwende vxworks installiert auf einer UEIPAC 600 1-G-Box. Ich versuche Daten von einer seriellen Schnittstelle zu lesen. Das ist mein Code.vxworks serielle Schnittstelle Lese-Timeout

void read_serial(int n){ 
/* store number of bytes read = int n*/ 
int num=0; 
/* hold the file descriptor */ 
int fd = 0; 
/* dev name from iosDevShow output */ 
char dev_name[] = "/tyCo/0"; 
/* buffer to receive read */ 
char re[n]; 
/* length of string to read */ 
int re_len = n; 
/* open the device for reading. */ 
fd = open("/tyCo/0", O_RDWR, 0); 
num = read(fd, re, re_len); /* read */ 
close(fd); /* close */ 
printf("number of bytes read %d\n",num); /* display bytes read*/ 
printf("displaying the bytes read: %s\n",re); 
} 

, wenn ich es führen Sie es einfach mal aus, bis ich die Tastatureingabe schlagen gibt dann wie so

number of bytes read 1 
displaying the bytes read: 
Pp 

Wie ich dies tun zu beheben richtig von der seriellen Schnittstelle zu lesen.

+1

Welcher Wert wurde von 'fd = open (...)' zurückgegeben? Sie müssen das überprüfen, nicht blindlings weitermachen. Ich frage mich auch, was der Sinn von 'char dev_name [] ="/tyCo/0 "ist; 'wenn du es nicht mal zum öffnen benutzt. Und haben Sie einen 'nul' Terminator am Ende von' re' platziert, bevor Sie ihn an 'printf' senden? –

Antwort

1

Sie überprüfen nicht, ob Sie die serielle Schnittstelle erfolgreich geöffnet haben.

fd = open("/tyCo/0", O_RDWR, 0); 
if (fd < 0) { 
    /* handle the error */ 
} 

Sie überprüfen nicht, ob Ihr Lesen von der seriellen Schnittstelle erfolgreich war.

Sie gehen davon aus, dass das Lesen von der seriellen Schnittstelle zu einer druckbaren Zeichenfolge führt, die wahrscheinlich nicht korrekt ist. Wenn Sie die Daten aus dem seriellen Port ausdrucken, sollten Sie die Daten wahrscheinlich hexadezimal ausgeben, damit Sie feststellen können, welche Bytewerte extrahiert wurden.

for (int i = 0; i < num; ++i) { 
    printf(" %02x", re[i]); 
} 
putchar('\n'); 
+0

Danke für die Tipps –

Verwandte Themen