急!!linux下串口通讯编程,read()不能读数据的原因?

happybgt 2008-12-29 10:02:16
!!本人菜鸟一个,刚编写了一段串口通讯程序,但是只能发送数据,不能接收数据,这是什么原因啊?请个位大侠不吝赐教,万分感谢!!
主函数代码如下:
volatile int STOP=FALSE;
int main(void)
{ int i;
int fd;
char send_buff[8]="OPEn";
int send_length;
int byteswrite;

char rcv_buff[8];
int rcv_length;
int bytesread;

char *dev = "/dev/ttyS1";
fd = OpenDev(dev); // fd= open("/dev/ttyS1",O_RDWR | O_NOCTTY);

set_speed(fd,2400); //波特率2400
if(set_Parity(fd,8,1,'N') == FALSE) //设置8,1,n
{
printf("Set Parity Error\n") ;
exit(0);
}

bzero(rcv_buff,sizeof(rcv_buff));

//发送数据,这里功能正常,能发送出数据“OPEn”
for(i=0;i<10;i++)
byteswrite=write(fd,send_buff,8 ) ; //成功返回写入数据的字节数,值等于length,如果写入失败返回-1
if(byteswrite==-1)
{
printf("write device %s error\n",*dev);
}

//读取数据!!这里的功能不能实现!!
while (STOP==FALSE)
{
bytesread =read(fd,rcv_buff,8 ) ; //读操作成功读取返回读取的字节数,失败则返回-1
rcv_buff[bytesread+1]='\0'; /* 设定字串终止字元, 所以我们能用 printf */
printf(":%s:%d\n",rcv_buff, bytesread);
if (rcv_buff[0]=='z')
STOP=TRUE;
}


if(close(fd)!=0)
{
printf("close device %s error",*dev);
}
return;
}
...全文
456 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cceczjxy 2008-12-30
  • 打赏
  • 举报
回复
c数组的下标从0开始,但计算的时候经常被搞混,很经典的错误。我想都犯过这样的错误。
fibbery 2008-12-29
  • 打赏
  • 举报
回复
你发送数据后确定对方给你也发送了数据马?否则,你没什么数据可收啊。
read之后判断一下错误,
if(read(...)==-1)
{
perror("read error");
break;
}
happybgt 2008-12-29
  • 打赏
  • 举报
回复
谢谢你啊!数据发送了,我把 rcv_buff[bytesread+1]='\0'; /* 设定字串终止字元, 所以我们能用 printf */
改成了rcv_buff[bytesread]='\0'就好使了,不过还是谢谢你!!

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧