|
在运行天嵌提供的串口测试程序Serial_Test.c时,只能写入数据,不能读出数据(read()函数总是返回0)。串口控制台输出如下:
[root@EmbedSky Serial_Test]# ./serial_test
readserailcfg
serialread.dev is /dev/tq2440_serial2
serialread.speed is 115200
serialread.databits is 8
serialread.stopbits is 1
serialread.parity is N
isatty success!
nwrite=15
^C
[root@EmbedSky Serial_Test]#
而天嵌提供的Linux移植手册显示,是可以读出数据的,手册的内容如下:
readserailcfg
serialread.dev is /dev/tq2440_serial2
serialread.speed is 115200
serialread.databits is 8
serialread.stopbits is 1
serialread.parity is N
isatty success!
nwrite=15
recv:1
H
recv:1
e
recv:1
l
recv:1
l
recv:1
o
recv:1
,
recv:10
EmbedSky#!
我后来在网上查了一下,有种说法是read()函数总是返回0,表明到达了文件的尾部。我就试着改了以下代码红色部分:
void serial_rw()
{
int i;
char buff[512];
char buff2[] = "hello,TQ2440!\n";
int nread,nwrite;
nwrite = write(serial_fd,buff2,sizeof(buff2));
printf("nwrite=%d\n",nwrite);
while(1)
{
lseek(serial_fd,0,SEEK_SET);//让文件读写指针相对于文件开头移动0字节
memset(buff,0,sizeof(buff));
if((nread = read(serial_fd,buff,512))>0)
{
buff[nread] = '\0';
#if 0 //调用这段代码可以实现回显,如果配合上面的回显,就会出现回显两次的情况。
write(serial_fd,buff,nread);
#endif
printf("\nrecv:%d\n",nread);
#if 0
for(i=0;i<nread;i++)
{
printf("%c",buff);
}
printf("\n");
#else
printf("%s",buff);
printf("\n");
#endif
}
}
close(serial_fd);
}
添加上述红色代码后,重新编译运行后,串口控制台还是没有读出数据,即read()函数还是返回0。实在不明白为什么会这样?
|
|