当前位置: 代码迷 >> VxWorks >> VxWorks+VmWare下使用串口的有关问题
  详细解决方案

VxWorks+VmWare下使用串口的有关问题

热度:10332   发布时间:2013-02-26 00:00:00.0
VxWorks+VmWare下使用串口的问题
X86平台下用VxWorks编程控制串口,跟硬件最相关的就是对串口的读写操作。自己编了一个小的读写程序,在机器上跑不通。具体表现为:写操作无效(另一方用串口调试助手收不到数据),但是write()返回值正常,也能看到VmWare上的串口设备有闪动;读操作是无限循环的,只要有数据就读入并显示,然后再写回串口去,自然是一点东西没写出去,而且也只能读到一定量的数据,之后另一方再怎么发都不再接收,但是在另一方关机时收到了那些之前没显示的数据。
  两边用串口调试助手试过了,收发均正常,问题应该是出在软件上。把程序贴出来,希望能找到一点思路。
C/C++ code
#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);        }    }    }


------解决方案--------------------------------------------------------
你的程序在我的ARM11平台是好的,我有两个串口,uart1做console, uart0跑这个测试程序
现象是
vxWorks起来后,在console输入test,开始测试,uart0可以收到hello,然后在uart0,每输入一个字符1,console就会打印 read: 1。
  相关解决方案