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;
}
停在循环内部, 高手帮忙看一下, 谢谢
串口读:
#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

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,为什么读不到数据呢
驱动的问题吗
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来等待数据并作超时处理
read()后 返回-1,为什么读不到数据呢
驱动的问题吗[/QUOTE]
检测errno,你阻塞读可能是EINTR,被中断打断!使用select或者poll来等待数据并作超时处理
作者: ssslady 发布时间: 2006-12-20
有单片机 嵌入式 电子 软件 操作系统方面的问题,给你推荐:
中国科技网(ww.21AW.com) - 科技探索,应用 - 计算机,嵌入式软硬件 - 项目开发交流平台
http://www.21aw.com
加我Q:164211043
中国科技网(ww.21AW.com) - 科技探索,应用 - 计算机,嵌入式软硬件 - 项目开发交流平台
http://www.21aw.com
加我Q:164211043
作者: chenhengbo 发布时间: 2007-01-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28