基于Vxworks实时操作系统的串口通信程序设计与实现
5.3 配置串口
int config_com1(void) //串口1配置函数
{ ioctl(sfd,FIOSETOPTIONS,OPT_LINE); //设置串口工作模式为行模式:LINE_MODE
ioctl(sfd,FIOBAUDRATE,9600); //设置串口波特率为9600bps
ioctl(sfd,FIOFLUSH,0); //清空输入输出缓冲
ioctl(sfd,SIO_HW_OPTS_SET,CS8|STOPB|PARENB|PARODD);
//设置 8 位数据位,2位停止位,带校验位,奇校验
}
5.4 串口接收数据
int accept _com1(void) //从串口1接收数据函数
{ while(1)
{ char * accept _buf;
FD_ZERO(&fds_data);//位码置零
FD_SET(sfd,&fds_data);//初始化位码
width=sfd +1;
//任务阻塞等待读串口准备完毕;
if(select(width,&fds_data,NULL,NULL,NULL)==ERROR)
return(ERROR);
read(sfd, accept _buf,sizeof(accept _buf)); //从串口读字符
printf("accept message is : %s nn", accept _buf); //输出接收到的信息
}
}
5.5 串口发送数据
int send_com1(void) //向串口1发送数据函数
{ char *send_buf =" Data had accept!"; //待发送数据
//任务阻塞等待写串口准备完毕
if(select(width,NULL,&data_fds,NULL,NULL==ERROR)
return(ERROR) ;
if(FD_ISSET(sfd,&fds_data)) //检查串口准备好就向串口写数据
write(sfd,send_buf,sizeof(send_buf)) ;
}
5.6 关闭串口
close(sfd);
6结束语
RS-232串口通信虽速率不高,但RS-422标准串行口通信则采用了双线传输,大大增加了抗共模干扰的能力,最大数据传输速度可以达到10Mb/s,这对于远程数据交换具有极大的优势。
本文描述了在实时操作系统VxWorks中利用串口实现数据通信的方法,并给出了示例程序,目前已经在我们开发的风洞测控系统中获得了应用。该方法可将其串口通信可适用于工业控制等多方面,具有广泛的适应性。在嵌入式实时操作系统中使用串口通信,不仅可扩展嵌入式设备通信能力,而且可扩大其的应用范围。
参考文献:
1孔祥营,柏桂枝.嵌入式实时操作系统vxworks及其开发环境Tornodo[M].北京:中国电力出版社,2002.01
2 陈智育,温彦军,陈琪编著VxWorks程序开发实践. 北京:人民邮电出版社,2004.05
3李方敏编著VxWorks高级程序设计. 北京:清华大学出版社,2004.05