我们在QNX6.2.1下开发的应用程序存在着串口通讯不稳定的现象,用示波器跟踪检查发现问题的原因在于数据有时发不出去(虽然write函数返回值是正确的)。我担心应用程序有问题所以编了一个简单的串口程序(只发送)来测试,还是会出现发不出去的问题,程序代码如下:
int main()
{
int fd;
struct termios tio;
BYTE buf[5]={0x1,0x6,0x0,0x52,0x60};
int num;
//open COM1
fd=open("/dev/ser1",O_RDWR );
if( -1 == fd )
cout<<“can’t open COM1 port”<<endl;
//set COM1 parameter
tcgetattr(fd, &tio); //set baudrate to 4800
cfsetospeed(&tio,B4800);
cfsetispeed(&tio,B4800);
tio.c_cflag &= ~CSIZE;
tio.c_cflag |= CS8; //set databit to 8
tio.c_cflag &= ~CSTOPB; //set stopbit to 1
tio.c_cflag &= ~PARENB; //set no parity
tio.c_cflag = tio.c_cflag | CLOCAL | CREAD;
tcflush(fd,TCIOFLUSH); //clear input and output buffer
tcsetattr(fd,TCSANOW,&tio );
for( ; ; )
{
num = write(fd, buf, 5 );
if( num == 5 )
cout<<“send successfully!”<<endl;
sleep(3);
}
close(fd);
return EXIT_SUCCESS;
}
在硬件(X86嵌入示开发板)上电后运行该程序,经常会发现能够send successfully!信息显示,但没有东西发出来,持续一段时间后,突然会一下子发出很多数据(有点象write程序将数据写入缓冲区,但没发出来),然后恢复正常。我觉得很困惑不知道为什么会这样,这到底是硬件问题、软件问题或者系统问题。硬件是委托专业专业的厂家(Advantech)开发的,操作系统似乎也不应该有这样的问题。因此我想问的是:
1.上述软件存在问题吗?
2.Write函数将数据写入缓冲区后是不是立即发出,什么情况下可能造成延缓发出的情况
3.这种现象能够排除硬件的问题吗?
PS:串口是以下命令驱动的:devc-tser8250 -u1 3f8,4