我想做个串口数据交换程序,就是将串口1收到的数据从串口2发送出来,同时,串口2收到的数据能够从串口1发送出来。程序如下:
void taskDataRecv(void)
{
int fd1;
int fd2;
int num1;
int num2;
char data1;
char data2;
int tyNum1;
int tyNum2;
char tyName1[20];
char tyName2[20];
fd_set data_fds;
char testData=89;
int width;
tyNum1 =1;
sprintf(tyName1, "%s%d", "/tyCo/", tyNum1);
fd1 = open(tyName1,O_RDWR,0);
if (fd1 == ERROR)
{
printf("open tyco1 error\n");
}
else{
printf("open:");
printf(tyName1);
printf(" OK\n");
}
ioctl(fd1, FIOSETOPTIONS, OPT_RAW);
ioctl(fd1, FIOBAUDRATE,9600);
ioctl(fd1, FIOFLUSH, 0);
tyNum2 =2;
sprintf(tyName2, "%s%d", "/tyCo/", tyNum2);
fd2 = open(tyName2,O_RDWR,0);
if (fd2 == ERROR)
{
printf("open tyco2 error\n");
}
else {
printf("open:");
printf(tyName2);
printf(" OK\n");
}
ioctl(fd2, FIOSETOPTIONS, OPT_RAW);
ioctl(fd2, FIOBAUDRATE,9600);
ioctl(fd2, FIOFLUSH, 0);
FD_ZERO(&data_fds);
FD_SET(fd1, &data_fds);
FD_SET(fd2, &data_fds);
width = 0;
width = fd1+fd2+1;
FOREVER
{
if (select(width, &data_fds, NULL, NULL, NULL) != ERROR)
{
if(FD_ISSET(fd1, &data_fds))
{
num1 = read(fd1,&data1,1);
if(num1!=0)
{
printf("get a com1 data");
}
}
if(FD_ISSET(fd2, &data_fds))
{
num2 = read(fd2,&data2,1);
if(num2!=0)
{
printf("get a com1 data");
}
}
}
else
{printf("error\n");}
if (select(width,NULL,&data_fds, NULL, NULL) != ERROR)
{
if(num1!=0)
{
if(FD_ISSET(fd2, &data_fds))
{
write(fd2, &data1, 1);
}
}
if(num2!=0)
{
if(FD_ISSET(fd1, &data_fds))
{
write(fd1, &data2, 1);
}
}
}
}
}
能够打印出“open tyco1 ok”和“open tyco1 ok”,用计算机的串口向串口1发送数据时,能够打印“get a com1 data”,但是不能从串口2 将数据发送出来,而且,串口1自己还向外发送“EE”的数据;再通过计算机向串口2 发数据,就什么发应也没有,也不能打印“get a com2 data”。
恳请各位达人帮忙!!谢谢!!!
[em49][em49][em43]