Jeg er igang med et større projekt, men jeg er kommet til et punkt jeg ikke kan bidde over.
Vi har i gruppen en 80c535 microcontroller, som skal afsende målinger, til en ombygget router som kører debian (mipsel arkitektur). Det store problem er, at lave et c program, som kan opfange alt hvad der kommer ind på den serielle port, og gemme det i en flad fil.
Jeg har vitterlig næsten ingen forstand på programmering, og har sidet de sidste dage, uden at komme ret langt.
Jeg er tilmed villig til at betale ægte penge for at få hjælp til den her.
Jeg blev da lidt inspireret, de eksempler som der blev vist på siden, kunne da også compileres, Men når jeg kører filen, kommer der en masse error output. feks: ./serial: line 22: typedef: command not found ./serial: line 23: typedef: command not found ./serial: line 24: typedef: command not found ./serial: line 27: struct: command not found ./serial: line 29: tcflag_t: command not found ./serial: line 30: tcflag_t: command not found ./serial: line 31: tcflag_t: command not found ./serial: line 32: tcflag_t: command not found
Lidt frusterende, men igen.. jeg tror det er fordi det er en mipsel arkitektur.
void signal_handler_IO (int status); /* definition of signal handler */ int wait_flag=TRUE; /* TRUE while no signal received */
main() { int fd,c, res; struct termios oldtio,newtio; struct sigaction saio; /* definition of signal action */ char buf[255];
/* open the device to be non-blocking (read will return immediatly) */ fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd <0) {perror(MODEMDEVICE); exit(-1); }
/* install the signal handler before making the device asynchronous */ saio.sa_handler = signal_handler_IO; saio.sa_mask = 0; saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO,&saio,NULL);
/* allow the process to receive SIGIO */ fcntl(fd, F_SETOWN, getpid()); /* Make the file descriptor asynchronous (the manual page says only O_APPEND and O_NONBLOCK, will work with F_SETFL...) */ fcntl(fd, F_SETFL, FASYNC);
tcgetattr(fd,&oldtio); /* save current port settings */ /* set new port settings for canonical input processing */ newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio);
/* loop while waiting for input. normally we would do something useful here */ while (STOP==FALSE) { printf(".\n");usleep(100000); /* after receiving SIGIO, wait_flag = FALSE, input is available and can be read */ if (wait_flag==FALSE) { res = read(fd,buf,255); buf[res]=0; printf(":%s:%d\n", buf, res); if (res==1) STOP=TRUE; /* stop loop if only a CR was input */ wait_flag = TRUE; /* wait for new input */ } } /* restore old port settings */ tcsetattr(fd,TCSANOW,&oldtio); }
/*************************************************************************** * signal handler. sets wait_flag to FALSE, to indicate above loop that * * characters have been received. * ***************************************************************************/
Jeg skal lige forstå jeres opsætning; I har en microcontroller (80c535) som skal sende til en ombygget router? Routeren skal så opfange dette og gemme i en fil, dvs. routeren har et filsystem og en com-port?
Når du compilerer koden gør du det så på routeren? Eller? Hvor forsøger du at afvikle programmet?
i routeren (en ombygget asus WL-500g) er der 2 USB-porte, den ene sidder den en disk til, hvor selve linux(debian) ligger på, den anden usb port, sidder der en usb -> serial converter. Vi har prøvet med de indbyggede programmer i debian, at modtage noget igennem den serielle port, så hardware mæssigt fejler den ikke noget.
jeg compiler hele koden på routeren ja, og forsøger også at afvikle det derpå :-)
Jeg tror dog stadig at der er noget galt med oversættelsen (compileringen). Noget siger mig at den ikke får lavet et rigtigt program og bliver forvirret når du forsøger at køre dette "ikke rigtige program"
Jeg har fået det til at virke nu :-) Efter et par hjernevridende dage, kom der hul igennem.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.