Hallo,
es wäre besser gewesen, wenn Du Dein Programm mal gepostet hättest, warum ?
Als was wurde RS232 deklariert ?
Der Fehlermeldung nach ist es keine termios struct
Bevor wir hier lange Fehlerlesen machen schick ich Dir mal meine bewährte Routine, ok ?
Wenn Du immernoch was nicht verstehst frag mal ruhig,
achso Das Programm macht nichts anderes, als in einer Endlosschleife auf Daten vom µC zu warten.
Gruß SebastianCode:#include <stdio.h> #include <stdlib.h> #include<sys/time.h> #include<sys/types.h> #include<unistd.h> #include <termios.h> #include <fcntl.h> #define DEVICE "/dev/ttyS0" #define BAUD B9600 int open_port(void){ int fd_ser; struct termios terminal; fd_ser = open(DEVICE, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); if (fd_ser == -1) { perror("Kann die Serielle nicht oeffnen"); exit(1); } fcntl(fd_ser, F_SETFL,FNDELAY); terminal.c_cflag = BAUD | CS8 | CLOCAL | CREAD; terminal.c_oflag &= ~OPOST; terminal.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); tcflush(fd_ser,TCIOFLUSH); tcsetattr(fd_ser,TCSANOW,&terminal); return fd_ser; } int read_port(int *fd_ser,unsigned char* buffer) { int a; /*Variablen für select*/ fd_set rfds; struct timeval tv; int retval; FD_ZERO(&rfds); FD_SET(*fd_ser,&rfds); tv.tv_sec = 1; tv.tv_usec = 0; retval = select(*fd_ser+1,&rfds,NULL,NULL,&tv); if (retval) { a=read(*fd_ser,buffer,255); return a; } else return 0; } int main(void){ int bytes; int i; int fd_ser; unsigned char puffer[256]; fd_ser = open_port(); while(1){ bytes = read_port(&fd_ser,puffer); if( bytes > 0){ for (i = 0;i< bytes;i++){ printf("%i\t",puffer[i]); } printf("\n"); } } return 0; }
P.S. Ich habe das Programm eben durch den Kompiler gejagt, es gab keine Fehler/Warnungen







Zitieren

Lesezeichen