作者blackspace98 (~我爱夏天~)
看板LinuxDev
标题[问题] rs232接/收问题请教
时间Sat Nov 10 11:36:10 2012
我想要在程式里面实作
同时含有写入与读取的动作
但是不知道为什麽
如果写入与读取分开成两只程式,就可以跑
写在一起反而就会卡住
因为我必须先送出资料给某机器(某机器使用rs232接到linux上)
某机器才会回传资料给我
不晓得是否我的观念有错呢?
另外未来如果换成rs485的话
程式需要再去指定用rs485来传输呢?
还是说只要接好线就可以了呢?
谢谢
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS0"
int main()
{
int fd,c=0,res;
struct termios oldtio, newtio;
char buf[256];
fd=open(MODEMDEVICE, O_RDWR|O_NOCTTY|O_NDELAY);
if(fd<0)
{
perror(MODEMDEVICE);
exit(1);
}
fcntl(fd, F_SETFL, 0);
printf("Open\n");
tcgetattr(fd,&oldtio);
bzero(&newtio,sizeof(newtio));
newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
printf("Read\n");
while(1)
{
write(fd,"test",4); //送资料给某机器
sleep(2);
res=read(fd,buf,255); //接收某机器回传的资料
buf[res]=0;
printf("res=%d buf=%s\n",res,buf);
//if(buf[0]=='/')break;
}
close(fd);
tcsetattr(fd,TCSANOW,&oldtio);
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 42.71.11.31
1F:→ uranusjr:先检查 read 和 write 的 return value 对不对 11/10 13:08
2F:→ uranusjr:然後你所谓「卡住」究竟是卡在哪里好歹也讲一下吧 11/10 13:18
3F:→ blackspace98:不好意思,是会卡在 res=read(fd,buf,255)这地方 11/10 14:33
4F:推 askacis:RS485是半双工,你的uart driver有支援吗? 11/10 14:57
5F:→ askacis:一般的作法都是用一根GPIO去拉,收送之前先拉high/low 11/10 14:58
6F:推 karamajean:res=read(fd,buf,255); 的下一行加个 perror("res"); 11/25 02:36
7F:→ karamajean:另外觉得在 buf[res]=0; 用 res 有点怪怪的 11/25 02:38
8F:→ karamajean:用 buf[255]=0; 试试 11/25 02:38
9F:→ blackspace98:谢谢各位,问题已解喽 11/26 20:06