linux如何判断串口读取完成,请问如何判断往串口的写操作(write)已经完成???高分请教!!!...

我想循环地往串口1和串口2写数据:

while(1)

{

if(往串口1的写操作write已经完成) 则往串口2写;

if(往串口2的写操作write已经完成) 结束本次循环;

}

请问如何判断往串口的写操作(write)已经完成???

用ioctl(fd,FIONREAD,&bytes);可以判断输入缓冲的字节数,

能否用类似的方法解决上面的问题?

|

int ret;

fd_set w;

struct timeval tv;

while(数据未写完) { // 数据写完退出

FD_ZERO(&w);

FD_SET(fd,&w);

tv.tv_sec=0;

tv.tv_usec=100000; // 超时时间设置为100 毫秒

ret=select(fd+1,NULL,&w,NULL,&tv);

if(ret0) { // 已写完

if(FD_ISSET(fd,&w)) { // 恒为真

// 继续写剩余数据

}

}

// else if(ret==0); // 超时没写完,继续等待

}

这样就可以分批写数据(当然也可以一次写所有数据),反正当前数据写完则select将返回>0

|

(3)另外,用ioctl(fd ,FIONRESD ,&bytes); 可以检查接收缓冲的字节数,我的问题是:

利用怎样的延时(尽可能小,比如用9600的波特率)和检查接收缓冲的字节数才能判串口的接收已经完成?在判断接收完成后才用read(fd ,mybuff,bytes)把串口接收缓冲中字节串读到自己的字节缓冲mybuff中。

这个问题嘛?

你的想法是不是,让接受端在接受完数据之前,就知道发送端一次要发送多少数据?

如果是这样的话,我的做法是,发送的数据里面包括一次要发送的数据大小。接受端首先读取数据长度,然后循环读完所有数据。

|

我没有考虑那么多,如果写我是通过这么一个循环来做的

nwrite(int ttyfd,char *buf,int len){

int count;

int now=len;

do{

count =write(ttyfd,buf,now);

if (count==now) break;

now -=count;

buf +=count;

}while (ount==0);

}

再度的时候,先判断是否缓存中有一帧的内容。

int nread(int ttyfd,char *buf,int len){

int count,

if(ioctl(ttyfs,FIOREAD,&count)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值