当前位置: 技术问答>linux和unix
串口程序能写不能读
来源: 互联网 发布时间:2016-03-18
本文导语: 直接先上代码: void ReadSThread::run() { int fdr,count,s; struct timeval timeout; fd_set rethread, wrthread; fdr = orde->dev; 串口文件描述符 count = fdr + 1; do ...
直接先上代码:
void ReadSThread::run()
{
int fdr,count,s;
struct timeval timeout;
fd_set rethread, wrthread;
fdr = orde->dev; 串口文件描述符
count = fdr + 1;
do
{
FD_ZERO(&wrthread);
FD_SET(fdr,&wrthread);
timeout.tv_sec = 0;
timeout.tv_usec = 0;
if(select(count, NULL, &wrthread, NULL, &timeout) > 0)
write(fdr, orde->ctl, 9);
FD_ZERO(&rethread);
FD_SET(fdr,&rethread);
timeout.tv_sec = 0;
timeout.tv_usec = 100;
s = select(count, &rethread, NULL, NULL, &timeout);
qDebug("lln");
//select(count, &rethread, NULL, NULL, &timeout);
//if(FD_ISSET(fdr, &rethread))
//if(select(count, &rethread, NULL, NULL, &timeout) > 0)
if(s > 0)
{
qDebug("readn");
memset(savebuf, 0, sizeof(savebuf));
if(read(fdr, savebuf, sizeof(savebuf)) > 0)
{
printf("%sn",savebuf);
QListViewItem* item = new QListViewItem( win1->ListView1, item );
item->setText( 0, "1");
item->setText( 1,savebuf);
}
}else
qDebug("%dn",s);
msleep(orde->cyc);
}while(flag2); 这里flag2是为true的
}
用于qt多线程编程读写串口....目的是先写串口发送命令出去,然后读串口的返回值....
在串口调试助手上收到了发送的命令..而且也设置了定时返回值给串口....
可总是读不到...其中的s值总为0,
qDebug("readn");这句也没有打印出来.....
郁闷了好久找不到原因....
望大虾们不吝赐教了....
void ReadSThread::run()
{
int fdr,count,s;
struct timeval timeout;
fd_set rethread, wrthread;
fdr = orde->dev; 串口文件描述符
count = fdr + 1;
do
{
FD_ZERO(&wrthread);
FD_SET(fdr,&wrthread);
timeout.tv_sec = 0;
timeout.tv_usec = 0;
if(select(count, NULL, &wrthread, NULL, &timeout) > 0)
write(fdr, orde->ctl, 9);
FD_ZERO(&rethread);
FD_SET(fdr,&rethread);
timeout.tv_sec = 0;
timeout.tv_usec = 100;
s = select(count, &rethread, NULL, NULL, &timeout);
qDebug("lln");
//select(count, &rethread, NULL, NULL, &timeout);
//if(FD_ISSET(fdr, &rethread))
//if(select(count, &rethread, NULL, NULL, &timeout) > 0)
if(s > 0)
{
qDebug("readn");
memset(savebuf, 0, sizeof(savebuf));
if(read(fdr, savebuf, sizeof(savebuf)) > 0)
{
printf("%sn",savebuf);
QListViewItem* item = new QListViewItem( win1->ListView1, item );
item->setText( 0, "1");
item->setText( 1,savebuf);
}
}else
qDebug("%dn",s);
msleep(orde->cyc);
}while(flag2); 这里flag2是为true的
}
用于qt多线程编程读写串口....目的是先写串口发送命令出去,然后读串口的返回值....
在串口调试助手上收到了发送的命令..而且也设置了定时返回值给串口....
可总是读不到...其中的s值总为0,
qDebug("readn");这句也没有打印出来.....
郁闷了好久找不到原因....
望大虾们不吝赐教了....
|
时间太短,100us串口发不过来数的,
timeout.tv_sec = 0;
timeout.tv_usec = 100;
改成
timeout.tv_sec = 1;
timeout.tv_usec = 0;
看看
你可以计算一下,如果你把波特率设置成9600
那就是一秒钟最大可以发送1200个字节额,你平均833us传送一个字节,你设置超时时间100us,连一个字节都发不过来,你怎么接收啊。
timeout.tv_sec = 0;
timeout.tv_usec = 100;
改成
timeout.tv_sec = 1;
timeout.tv_usec = 0;
看看
你可以计算一下,如果你把波特率设置成9600
那就是一秒钟最大可以发送1200个字节额,你平均833us传送一个字节,你设置超时时间100us,连一个字节都发不过来,你怎么接收啊。