|
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);
- }
- }
- }
复制代码
|
|