您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于select的I/O复用机制处理多个串口信息的方案 正文
基于select的I/O复用机制处理多个串口信息的方案

基于select的I/O复用机制处理多个串口信息的方案

点击数:7269 次   录入时间:03-04 11:51:14   整理:http://www.55dianzi.com   嵌入式系统-技术

    4轮询检测方法与select方法的比较

    4.1轮询检测方法

    轮询检测方法是指对串口进行非阻塞的读写操作。当操作未成功时,让进程或线程挂起一段时间,然后再使用非阻塞调用来重新查询串口是否有可读/写数据。用此方法,相当于系统不断地对接收或者发送操作的执行结果进行探测,直到把数据发出去或者接收完成定量的数据,才退出此轮询循环。而对于接收与发送不确定哪个时刻会到达的情况,即随机性比较高的读/写操作,采用轮询方法会造成CPU资源浪费。如果轮询频率过低,则会使系统少接收一部分数据或接收过慢;反之,则接收方会因为等待太久而不能接收更多新的数据。轮询频率过高的情况,会让CPU过度频繁地查询串口状态,造成过多的耗用CPU执行周期,降低其利用率。

    4.2select机制能充分利用系统时间的原因

    与频繁调用非阻塞读写函数来轮询监听I/O的方法相比,select调用允许用户把进程本身挂起来,同时使系统内核监听所要求的一组文件描述符的任何活动。只要确认在任何被监控的文件描述符上出现活动,select调用将返回指示该设备文件已经准备好的信息。这样就使进程能相对实时地监测到I/O设备上随机的变化,而不必由进程本身去探测输入数据是否准备好。

    5利用selectI/O的机制实现GPS与GPSOne数据的接收

    本文提出的基于GPS与GPSOne信号的双定位的解决方案,即对系统两个串口定位信号的监听与处理,充分利用uClinux下基于Select的I/O复用机制,更利于较复杂系统的控制和管理。

    方案实现的程序流程如图4所示。

565

    图4双定位信息获取的程序流程

    以下代码为使用SelectI/O机制接收GPS信息和GPSOne信息的软件实现:

    intMaxfd=fd_gps>fd_gpsOne?fd_gps:fd_gpsOne;//得到串口描述符中较大的一个

    structtimevaltv;//定义超时控制结构

    fd_setfds;//文件描述符集合变量

    tv.tv_sec=5;//设定超时值5s

    tv.tv_usec=0;

    while(1){//通过GPSOne串口,发送GPSOne定位请求

    Rt=send_port(fd_gpsone,"AT+GPSSTRTr",strlen("AT+GPSSTRTr");

    if(Rt)==-1)

    printf("Errorhappened!");

    FD_ZERO(&fds);//初始化文件描述符集合

    FD_SET(*fd_gps,&fds);//设置文件描述符集合的相应位

    FD_SET(fd_gpsOne,&fds);//使用select,让内核开始监听GPSOne和GPS串口设备

    fd_sel=select((Maxfd)+1,&fds_gps,NULL,NULL,&tv);

    if(fd_sel<0){

    printf("Errorhappenedwhilereceivinggpsdata.n");}

    elseif(FD_ISSET(*fd_gps,&fds)){//若GPS串口设备有数据可读

    recv_len=recv_port(fd_gps,buf,254);

    if(recv_len>0){

    mEMCpy(gps_info,buf,recv_len);//信息保存到

    gps_info数组中gps_info_process(gps_info);//解析定位信息处理

    }

    }

    elseif(FD_ISSET(*fd_gpsOne,&fds)){//若GPSOne串口设备有数据可读

    recv_len=recv_port(*fd_gpsOne,buf,254);

    if(recv_len>0){mEMCpy(gpsOne_info,buf,recv_len);//信息保存到gpsOne_info数组中

    gpsOne_info_process(gpsOne_info);//解析定位信息处理

    }

    }

    sleep(1);

    }

    6设计总结

    本文详细说明了串口编程的基本方法和步骤,并提出一种基于select的I/O复用机制处理多个串口信息的方案,同时给出这种方案的具体实现。此方案具有较高的可靠性,保证了多个串口的信息可以很好地被接收和处理,而且不相互干扰,利于系统更好地管理多个文件设备。特别是在数据采集和数据传输领域中,select利用内核同时监听多个设备描述符机制,可以被广泛地应用于嵌入式系统多路I/O采集的设计中。



www.55dianzi.com



上一页  [1] [2] 


本文关键字:信息  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术