|
亚瑟王,我把程序简化了一下,没有用if()语句,而是直接对串口的数据结构进行设置,而且,串口文件的返回值fd_2=3,所以我在open()之前,加了一个close(0),这样fd_2返回0值了。具体代码如下:
int fd_2;
int nread;
char buff[512];
close(0);///////////////////////////////////////////////////////////////
struct termios options_2;
int fd_2= open( "/dev/tq2440_serial1", O_RDWR | O_NONBLOCK, 0 );
if(fd_2!= 0)
{
perror("can't open the serial port2");
return -1;
}
else
return fd_2;
tcflush(fd_2,TCIOFLUSH);
tcgetattr( fd_2,&options_2);
bzero(&options_2,sizeof(options_2));
options_2.c_cflag &= ~CSIZE;
options_2.c_cflag |= CS8;
options_2.c_cflag &= ~PARENB;
options_2.c_iflag &= ~INPCK;
options_2.c_cflag &= ~CSTOPB;
options_2.c_lflag&=~(ICANON|ECHO|ISIG);
options_2.c_oflag&=~OPOST;
options_2.c_iflag&=~(IXON|IXOFF|IXANY);
options_2.c_cc[VTIME]=0;
options_2.c_cc[VMIN]=1;
tcflush(fd_2, TCIOFLUSH);
cfsetispeed(&options_2, B115200);
cfsetospeed(&options_2, B115200);
tcsetattr(fd_2, TCSANOW,&options_2);
tcflush(fd_2,TCIOFLUSH);
printf("start send data...\n");
while(1)
{
while((nread = read(fd_2,buff,512))>0)
{
printf("\nLen %d",nread);
buff[nread+1]='\0';
printf("\n%s\n",buff);
}
}
但是编译后,在控制台运行以上程序,仍然不能read到板子的串口2(tq2440_serial1)的数据,程序
停在while循环处(终端有打印printf("start send data...\n");),我怀疑串口的设置有问题,但是好像
和COM_RD_Test中调用设置函数来完成的工作没有区别啊??!
请管理员给点意见啊!!!! |
|