+ -
当前位置:首页 → 问答吧 → linux下串口读数据的问题, 高手帮忙看看,谢谢

linux下串口读数据的问题, 高手帮忙看看,谢谢

时间:2006-02-09

来源:互联网

写了一个串口通讯的东西, 在一台机器上测试(短接2,3针), 读程序运行于后台, 数据可以接受到, 可读程序却退出不了,
停在循环内部, 高手帮忙看一下, 谢谢


串口读:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>

#define BAUDRATE B9600
#define SERIALREADDEVICE "/dev/ttyS0"
#define SERIALWRITEDEVICE "/dev/ttyS0"
#define BUFFERSIZE 255

char *SerialRead()
{
        char cBuf[8], *pReceBuf;
        char cAllBuf[BUFFERSIZE];
        int iCount = 0;
        struct termios tmIO;
        int ttyCOM;
        ttyCOM = open(SERIALREADDEVICE, O_RDWR|O_NOCTTY);
        if (ttyCOM < 0)
        {
                fprintf(stderr, "%s Port Open Error!\n", SERIALREADDEVICE);
                exit(-1);
        }
        tcgetattr(ttyCOM, &tmIO);
        cfmakeraw(&tmIO);
        cfsetispeed(&tmIO, BAUDRATE);
        cfsetospeed(&tmIO, BAUDRATE);
        tmIO.c_cflag &= ~CSIZE;
        tmIO.c_cflag |= CS8;
        tmIO.c_cflag &= ~PARENB;
        tmIO.c_iflag &= ~INPCK;
        tmIO.c_cflag &= ~CSTOPB;
        tmIO.c_lflag = 0;
        tmIO.c_cc[VTIME] = 5 0;
        tmIO.c_cc[VMIN] = 0;
        tcsetattr(ttyCOM, TCSANOW, &tmIO);
        pReceBuf = cBuf;
        iCount = read(ttyCOM, pReceBuf, 255);
        if (iCount == -1)
        {
                fprintf(stderr, "Receive Error!\n");
                exit(-1);
        }
        //循环开始
        while (iCount > 0)
        {
                printf("buffer: %s\n", pReceBuf);
                strcat(cAllBuf, pReceBuf);
                memset(cBuf, 0, sizeof(cBuf));
                printf("cAllBuf: %s\n", cAllBuf);
                iCount = read(ttyCOM, pReceBuf, 255);  //当写程序串口数据写完时, 读程序就停在这里了
                if (iCount == -1)
                {
                        fprintf(stderr, "Receive Error!\n");
                        exit(-1);
                }

                printf("iCount: %d\n", iCount);
        }
        printf("All: %s\n", cAllBuf);
        close(ttyCOM);
        return pReceBuf;
}      

作者: yong_t   发布时间: 2006-02-09

请问解决了没有 我也遇到同样的问题  
read()后 返回-1,为什么读不到数据呢 
驱动的问题吗      

作者: frank222   发布时间: 2006-12-16

你阻塞读,当然会停止了,参考Serial Programming Guide for POSIX Operating Systems 不会使用select来解决超时!!!!!!!!!!!!!      

作者: ssslady   发布时间: 2006-12-20

[QUOTE=frank222]请问解决了没有 我也遇到同样的问题  
read()后 返回-1,为什么读不到数据呢 
驱动的问题吗[/QUOTE]
检测errno,你阻塞读可能是EINTR,被中断打断!使用select或者poll来等待数据并作超时处理      

作者: ssslady   发布时间: 2006-12-20

有单片机 嵌入式 电子 软件 操作系统方面的问题,给你推荐:
中国科技网(ww.21AW.com) - 科技探索,应用 - 计算机,嵌入式软硬件 - 项目开发交流平台
http://www.21aw.com

加我Q:164211043      

作者: chenhengbo   发布时间: 2007-01-24

热门下载

更多