VxWorks+VmWare下使用串口的问题
X86平台下用VxWorks编程控制串口,跟硬件最相关的就是对串口的读写操作。自己编了一个小的读写程序,在机器上跑不通。具体表现为:写操作无效(另一方用串口调试助手收不到数据),但是write()返回值正常,也能看到VmWare上的串口设备有闪动;读操作是无限循环的,只要有数据就读入并显示,然后再写回串口去,自然是一点东西没写出去,而且也只能读到一定量的数据,之后另一方再怎么发都不再接收,但是在另一方关机时收到了那些之前没显示的数据。
两边用串口调试助手试过了,收发均正常,问题应该是出在软件上。把程序贴出来,希望能找到一点思路。
#include "vxworks.h"
#include "sysLib.h"
#include "tyLib.h"
#include "ioLib.h"
#include "stdio.h"
#include "ioctl.h"
#include "string.h"
void test()
{
int fd;
int i; /* 计数器 */
int readcnt; /* 待读取字节数 */
int wtcnt; /* write()返回值 */
char buff[100]; /* 输入缓冲 */
struct fd_set readfd; /* 串口设备置位 */
struct fd_set savefd; /* 重置变量 */
char dt[] = "\nhello!"; /* 要输出的数据 */
fd = open("/tyCo/0",O_RDWR,0);
ioctl(fd,FIOSETOPTIONS,OPT_RAW);
ioctl(fd,FIOBAUDRATE,9600);
ioctl(fd,SIO_HW_OPTS_SET,CS8); /* 8数据位,1停止位,无校验 */
ioctl(fd,FIOFLUSH,0);
FD_ZERO(&readfd);
FD_SET(fd,&readfd);
savefd = readfd;
wtcnt = write(fd,dt,strlen(dt)); /* 输出 */
printf("\nWrite ok. number = %d",wtcnt);
bzero(buff,100);
while(1)
{
readfd = savefd;
select(fd+1,&readfd,NULL,NULL,NULL); /* Select()始终阻塞于串口 */
ioctl(fd,FIONREAD,&readcnt);
if(readcnt > 0)
{
read(fd,buff,100);
printf("\nRead: %s ",buff);
write(fd,buff,100);
}
}
}