EDN首页   博客首页

39

关于投票
串口通信例子

以下例子的运行环境是装载 Vxworks的两台PC机,pc机之间用串口COM2连接.为了把要讨论的问题更明显的表现出来,例子将简化一些和串口通信不直接相关的内容,并忽视错误处理和 Vxworks的一些编程约定(coding conventions).
函数void usrApplnit(void)后追加语句:
                          tty_send();
          代码如下:
            #include "vxworks.h"
            #include "stdio.h"
            #include "taskLib.h"
            #include "ioLib.h"
int tty_send(void)
{
    int fd;
    int bytes_out;
  char buff ]="Serial commuciation妙pc com2";  //待发送的字符串
ttyDrv();     //把申口驱动程序添加到系统中
//下面语句把申口 com2添加到系统中," tyC0/l"是设备名,
  sysSerialChanGet(1)用来获得指向串口描述符的指针,后面两个参数定义了读缓冲区和写缓冲区的大小。
ttyDevCreate("/tyCo/1",sysSerialChanGet(l),512,512);
//以可读可写方式打开串口2,获得串口2的文件描述符
fd="open"("/tyCo/1",O_RDWR);

//设置串口2的数据模式
ioctl(fd,FIOSETOPTIONS,OPT_PAW);
//设置串口 2的波特率/
ioctl(fd,FIOBAUDP,ATE,9600);
//把字符串buf反复的送往串口
while(l)
{
byteses out="write"(fd,buf strlen(buf));
printf("output chars total: "/"d\n",bytes out);
taskDelay(60);
//关闭串口2
close(fd);
return l;
接收端代码
    以下代码也可以单独保存在一个文件中,和其他所有文件一同编译。在usrApplnit.c中的函数void usrApplnit(void)后追加语句:
                        tty_receive();
代码如下:
#include "vxworks.h"
#include "stdio.h"
#include'SoLib.h"
#include "selectLib.W
inttty_receive(void)
{
  int i,j;
    int fd,width;
  int bytes in;
    char buf]10];
    struct fd set_readFds;
    //注释同上
ttyDrv();
//注释同上
ttyDevCreate("ItyColl",sysSerialChanGet(1),512,512);
// 注释同上
fd="open"("/tyCo/1",O_RDWR);
ioctl(fd,FIOSETOPTIONS,OPT_RAW);  //注释同上
ioctl(fd,FIOBAUDRATE,9600);      //注释同上
//下边语句用”lect函数将任务阻塞在申口2进行读操作
FD_ZERO(&readFds);    //清空被读监控的文件描述符集
//串口2的文件描述符在被读监控的文件描述符集中It相应的位 N
FD_SET(fd,&readFds);
width="fd"+l;
//将任务阻塞在串 口2进行读操作
if(select(width,&readFds,NULL,NULL,NULL)==ERROR)
    return(ERROR);
//如果可以读串口,就进行读操作
if(FD_ISSET(fd,&readFds))
{
while(1)
if( (bytes_in="read"(fd,buf,7)) - 0)
    break;
for(i-O;i<bytesLin;i++)
    printrf("%c",buf[i]);
}
//关闭串口2
close(fd);
return 1;
    上边的两段代码简要的实现了两个Vxworks系统之间的串口通信。意图在于以例子说明前面叙述的串口驱动原理并为串口通信提供一个基本的编程参考。如果在上述代码中再加入一些错误处理和宏定义、对代码进行适当的封装、采用更好的c程序设计方法,就能得到更健壮、更好用、功能更强的串口通信程序。

系统分类: 嵌入式
用户分类: 串口
标签: vxworks 串口 例子
来源: 无分类
发表评论 阅读全文(1532) | 回复(0)

72

关于投票
开始学串口
串口通信基本原理

   串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

   串口通信的优点是开发简单,在传输数据量不大、要求速度不高而传输距离较大的通信场合得到广泛应用,,在调试程序中被广泛应用。

    在VxWorks中,将I/O系统设计成为任何类型的设备提供一个简单、统一、独立于设备的接口,任何对于串口的操作都可以视为对一个文件的操作,而不必了解串口设备或程序驱动实现的细节。在串口通信软件的设计中,当串口初始化完成后,在使用之前利用open()打开相应串口,然后进行配置。

    VxWorks提供终端和伪终端设备驱动。Tty驱动针对实终端;pty针对仿真终端的程序。Tty设备有两种操作模式:raw模式和line模式。在raw模式下,每个刚从设备输入的字符对读者都是有效的;在line模式下所有输入字符被存储,直到NEWLINE字符输入。设备选项字使用带FIOSETOPTIONS 功能的ioctl()程序来设置。配置完成后,依据串口打开时的读写标志,调用函数write()、read()对串口进行只读操作、只写操作或同时进行读写操作。为提高数据接收的实时性,可采用中断方式,利用VxWorks提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性。

系统分类: 嵌入式
用户分类: 串口
标签: vxworks 串口
来源: 无分类
发表评论 阅读全文(2975) | 回复(9)
总共 , 当前 /