Linux下串口通信异常的问题

本人在linux下进行串口通信程序开发,把串口通信放在一条单独的线程里,问题来了,程序在启动另外一个计算线程后,串口通信出现异常。两线程间并没有任何数据共享,串口通信无论非组塞还是阻塞都有问题!请高手分析下原因!

1

1个回答

出现异常是什么意思? 串口读和写是不同的线程么?还是就一个简单的线程啊?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
串口通信问题处理
关于串口收发异常芯片管脚电压测量。
winform 串口接受常遇到的异常
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)  {     int SDateTemp = this.serialPort1.ReadByte();     //读取串口中一个字节的数据      this.tB_ReceiveDate.Invoke(         //在拥
linux下Qt串口通信小结
由于项目需要,实现在linux下qt串口通信问题,搞了一周,算是实验通过了,记录一下。      主机:ubuntu11.04 qt版本:4.7.2         当要实现在linux下qt串口通信时,首先查看qt有没有自带的类,如果有自带的类,实现起来是最方便的,但令人遗憾的时,没有,但可以使用QIOdevice,因为在linux下,万物结文件,但是,我不想用这种方式,太麻烦了,所
Linux下串口通讯,完整程序
程序代码已经在Linux系统上正确运行 #include #include #include #include #include #include //set baud rate #include #include #include #include #include //#define rec_buf_wait_2s 2 #define buffLen 1024
Linux下基于QT的串口通信程序(Tiny6410)
由于有关ARM开发板很多外设都是支持串口通信的,所以在QT下编写一个串口通信程序就显得尤为重要。下面将一步一步叙述开发过程: Linux下QT串口通信相关文件及例程下载!!! 1、开发板上设备驱动位置:/dev下存有各种设备驱动文件名 2、首先来看一下串口通信几个关键文件: posix_qextserialport.cpp和posix_qextserialport.h文件定义了
linux虚拟串口
linux虚拟串口(用于调试程序) 1 将下列Python代码保存成VitrualCom.py: #! /usr/bin/env python #coding=utf-8 import pty import os import select def mkpty(): # open virtual port master1, slave = pty.openpt...
linux下的串口通信
一、串口的基本原理 1 串口通讯     串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。     串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。 2 串口通讯的数据格式     一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总
用QT做的LINUX下串口通信(测试可用)
用QT做的LINUX下串口通信(测试可用),控件为一个LABEL,三个按键,具体看程序里面改名字就可以了
Linux下JAVA串口通信
 费了好大的劲搞定Linux系统上用Java写串口通信的问题。 jdk中没有原生的串口api,网上找了半天的资料,大概知道了:Linux系统上用Java写串口程序,有两个包比较常用,一个是当年sun官方出的javacomm,但是找了半天都是老版本的居多,oracle官方不提供下载了,不爽。另一个是gnu的rxtx comm,看了一下还算靠谱,不过官方的wiki上(http://rxtx.q
串口通讯中出现的错误(1)
 问题1: 在做串口接收接收中断时,有这么一个现象,当接收到数据后,进入中断,如果再次发送的话,就进不去中断了,并且程序阻塞住了?为什么呢 源码如下:   原因如下:在数据寄存器和数据总线之间有一个移位寄存器,接收数据是先把数据放在移位寄存器中,如果没有读取移位寄存器里面的数值的话,就不能继续接收数据了,因此,在接收到一次数据后,如果不读取其中的数据的话就会阻塞。 所以 只要将注释部分的数据读取出...
串口通信——第一个数据异常现象的解决方法
一开始学串口通信,套用的是郭天祥新概念的程序思路,可能那会也没仔细考虑到晶振跟初值的影响之大,所以在开始调试的时候PC出现了第一个数据重复而以后数据正常的现象(怀疑也是晶振跟初值设置的问题)。后来在几个月后的一次调试过程中,再次发现另一个问题:接收的第一个数据会出现错误(0x00 0xf0 0xff结果出现0x80 0xf0 0xff),检查发现SMOD没有进行初始化,然后再次看了下关于的串口通信
sct-1.05.tar.gz
linux下的串口通信测试工具
s3c2410_串口收发源码
一个linux下串口通信源码。
linux下基于QT的串口程序
Qt5发布之前,Qt实现串口通信一般是采用第三方类库qextserialport。Qt5发布后自带了QtSerialPort 能够支持串口通信。 一:QT5.0以下版本 1.在工程中引入4个文件。 qextserialbase.cpp和qextserialbase.h 以及posix_qextserialport.cpp和posix_qextserialport.h 2.添
串口通信--CSerialport类
VS2013下使用CSerialPort类进行串口通信
项目难题之PC和ARM串口莫名其妙无法通信的问题
时钟频率、串口协议什么的都没有问题,线的连接也没问题。之前在keil上编译的程序能跑,现在竟然跑不了了,具体的问题是:ARM能够发数据到PC上,但ARM收不到PC的数据。即使想实现简单的功能都不行:ARM转发来自PC的数据!!通过测试发现:ARM一直卡在查询接收缓存器的过程中。后来实在不行,就放弃了keil了,改用ADS,用着用着发现ADS讨厌,不好,不能编写烧到nor flash零地址、断电不易
Linux下串口收发通信
Linux下编程的过程有些固定,很多都是比如打开、配置、关闭等等 串口通信流程:打开串口ttySn--->初始化串口--->读写(read、write)--->关闭串口 最合适的指导书:https://www.ibm.com/developerworks/cn/linux/l-serials/   串口设置        最基本的设置串口包括波特率设置,效验位和停止位设...
C++编程笔记:串口通信在windows环境和linux环境下的异同和代码实现
1. 串口通信流程不管是对于windows还是linux,串口通信的流程都是以下4步: 1. 打开串口 2. 设置串口 3. 发送、接收数据 4. 关闭串口
linux串口编程 文档
linux下串口通信的文档, 作为参考
C——Linux下的串口编程
之前在学习安信可A7模块时,是在PC上使用串口调试助手做了GPS的坐标数据信息的采集,同时分析了一些语句的含义。在这过程中,涉及到对嵌入式开发人员一个非常重要的知识:串口通信。在前篇也说到,我们将会自己写程序来对GPS数据进行解析,而这些数据正是靠串口来传输的。所以,本篇博文将进行关于串口通信的学习。一、串口接头首先我们得知道串口长什么样,常用的串口接头有两种,一种是9针串口(简称DB-9),一种是
linux 串口通信详解
Linux串口编程详解 目录(?)[+] 串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口。计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备。虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。虽然现在在很多个人计算机上,原来用以连接外
如何在树莓派/linux下使用淘宝屏幕驱动
如何在树莓派/linux下使用淘宝屏幕驱动,解决了不认屏和分辨率异常的问题。仅供参考!!!!
linux c/c++串口通信
/*串口设备无论是在工控领域,还是在嵌入式设备领域,应用都非常广泛。而串口编程也就显得必不可少。 偶然的一次机会,需要使用串口,而且操作系统还要求是Linux,因此,趁着这次机会,综合别人的代码, 进行了一次整理和封装。具体的封装格式为C代码,这样做是为了很好的移植性,使它可以在C和C++环境下, 都可以编译和使用。代码的头文件如下: */ ///////////////////////////...
linux与windows系统进行串口通信
数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程。 首先需要用到一个软件----虚拟串口软件。具体用法说明可百度,增加两个互相通信的串口,pc机占一个,虚拟机占一个。  http://download.csdn.net/download/li235456789/10191208 虚拟串口软件 1,首先,增加两个
Linux C++ 串口通信
说明 随着嵌入式开发在物联网行业中站的比重日益增加,Linux 环境下的C++也不断变得更为大众化。习惯了Window平台开发的开发人员, 都被Visual Studio的强大宠坏了, 无论是什么样的开发需求, 总能有现成的轮子可以直接拿来用。就好比这里要介绍的串口通信, 在Windows开发中, 无论是C++, MFC,还是C#, 巨硬大大都给我们做好了封装。可是在Linux下就没那么简单了,...
linux下的java使用串口
先说点废话。。不喜欢看的略过有感而发。早上出门买菜忘带钥匙,又忘带手机,联系不上房东,今晚睡哪都成问题...心里狠狠把麻花疼骂了一顿,有QQ还要开发微信,你这么任性你妈妈知道吗?没手机还上不了微信,真是吐血。回顾自己写的blog,整天在初级问题上纠结,涉及的又杂,看来一辈子成为不了大神了。java c# c++ 单片机 linux 安卓每天就是各种平台换来换去,项目切来切去,整天就是踩各种坑。。。...
Linux-QT4.7 实现串口通信
在qt5版本以下,想要实现串口通信需要两个集成类,posix_qextserialport 和 qextserialbase,需要的可以移步到 下载点。 在posix_qextserialport这个类中关于串口设置的定义很详细,常用的写法一般是 Posix_QextSerialPort * myCom; myCom->open(QIODevice::ReadWrite); // 定义打开方
在Linux下用QT5编写第一个串口调试程序
以下学习类容参考了yafeilinux的专栏 :http://blog.csdn.net/yafeilinux/article/details/5741706 第一步:由于我们用的是第三方库文件,所以我们首先需要下载qextserialport-1.2win-alpha,下载地址:http://sourceforge.net/projects/qextserialport/files/,具体
Linux下的串口编程实例
亲测可用,移植时根据需求修改即可,转载自:http://blog.csdn.net/w282529350/article/details/7378388 //串口相关的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定义*/ #include /*Unix 标准函数定义*/ #include #include
应用程序(一)-linux应用程序学习之串口通讯编程
之前我们移植好了内核,并且支持了网卡驱动如下: http://blog.csdn.net/fengyuwuzu0519/article/details/72846205 内核中已经默认支持了串口,启动内核后存在:/dev/ttySAC0、/dev/ttySAC1、/dev/ttySAC2。 这节的目的是使用串口驱动来与外界串口进行数据通讯。 一、串口应用编程 1、网上串口资源 linu
解决Linux下串口数据接收不全的异常问题
1、引言     最近在Linux下调试串口程序,遇到了串口数据接收不全的异常问题,经过将近一上午的努力终于找到问题根源,特此分享给大家,此次调试过程中用到了主要用到了minicom工具,至于minicom的使用大家可以自行查找相关资料。 2、正文     此次调试环境实在两个平台下,负责发送串口数据一方是VxWorks平台,负责接收的一方是arm+Linux平台,发送的是一些必要的时间和其...
linux下串口通信程序
linux下串口通信程序 gcc编译通过,真实可用
利用linux虚拟机进行串口通信模拟
最近在做linux下串口通信速率测试,不过我只有一台装有linux系统的电脑。
linux下串口通信
linux下串口通信,已经测试通过,很经典
求教:Linux下串口通信问题
我在Linux下用termios编程设置了/dev/ttyS0串口的属性,但只能往串口写,不能读串口,rn用read函数总是返回-1,这是为什么?
Linux下串口通信问题
[b]该程序运行的时候write函数写的数据会同时被自己的read 函数读到,该怎么修改?(红色部分是问题区,下边那个substr函数是个取字符串某几位的函数,此函数正常可以不用管)[/b][i][/i]rn#includern#includern#includern#includern#includern#includern#include rn#include rn#include rn#include rn#include rn#include rnrn#include"json_link_list.h"rnrn#define TRUE 1rn#define FALSE 0rn#define flag 1rn#define noflag 0rnrnrnrnchar *substr(const char *s,int n1,int n2);rnvoid *read_from_pcUart(); //读线程rnrnrnpjson_ll pjl;rnpthread_mutex_t mutex_pjl,mutex_uart;//互斥锁rnrnstatic int fd;rnint wait_flag = noflag;rnrn[b]void *read_from_pcUart()[/b]rn char bufr[255];rn char s[512];rn int res;rn printf("fd =%d\n",fd);rn [color=#FF0000]while(1)rn // printf("aaaaaaaaaaaaaaaaa\n");rn memset(bufr,0,sizeof(bufr));rn if((res = read(fd,bufr,255)) > 0)rn sprintf(s,"from pc_uart:%s",bufr);rn printf("%s\n",s);rn //获得互斥锁rn pthread_mutex_lock(&mutex_pjl);rn //将数据加入链表rn insert_json_link_list(pjl,s,res,2);rn //释放互斥锁rn pthread_mutex_unlock(&mutex_pjl);rn rn fflush(stdout);rn rn close(fd);[/color]rnrnrn[b]char *substr(const char *s,int n1,int n2)[/b] //字符串取特定值rn printf("mmmmmmmmmmmmmmm\n");rn char *sp=malloc(sizeof(char)*(n2-n1+2));rn int i,j=0;rn for(i=n1;i<=n2;i++)rn sp[j++]=s[i];rn rn sp[j]='\0';rn printf("malloc ok\n");rn return sp;rnrnrnint speed_arr[] = B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300, B115200,B38400, B19200, B9600,B4800, B2400, B1200, B300, ;rnint name_arr[] = 115200,38400, 19200, 9600, 4800, 2400, 1200, 300,115200, 38400, 19200, 9600, 4800, 2400,1200, 300, ;rnrn[b]static int set_parity([/b]int fd,int databits,int stopbits,int parity)rnrn struct termios options;rn if (tcgetattr (fd, &options) != 0)rn perror ("SetupSerial 1");rn return (FALSE);rn rn options.c_cflag &= ~CSIZE;rn switch (databits)rn case 7:rn options.c_cflag |= CS7;rn break;rn case 8:rn options.c_cflag |= CS8;rn break;rn default:rn fprintf (stderr, "Unsupported data size\n");rn return (FALSE);rn rn switch(parity)rn rn case 'n':rn case 'N':rn options.c_cflag &= ~PARENB; /* Clear parity enable */rn options.c_iflag &= ~INPCK; /* Enable parity checking */rn break;rn case 'o':rn case 'O':rn options.c_cflag |= (PARODD | PARENB);rn options.c_iflag |= INPCK; /* Disnable parity checking */rn break;rn case 'e':rn case 'E':rn options.c_cflag |= PARENB; /* Enable parity */rn options.c_cflag &= ~PARODD;rn options.c_iflag |= INPCK; /* Disnable parity checking */rn break;rn case 'S':rn case 's':rn options.c_cflag &= ~PARENB;rn options.c_cflag &= ~CSTOPB;rn break;rn default:rn fprintf (stderr, "Unsupported parity\n");rn return (FALSE);rn rnrn switch(stopbits)rn rn case 1:rn options.c_cflag &= ~CSTOPB;rn break;rn case 2:rn options.c_cflag |= CSTOPB;rn break;rn default:rn fprintf (stderr, "Unsupported stop bits\n");rn return (FALSE);rn rn /* Set input parity option */rn if (parity != 'n')rn options.c_iflag |= INPCK;rn tcflush (fd, TCIFLUSH);rn options.c_cc[VTIME] = 150;rn options.c_cc[VMIN] = 0; /* Update the options and do it NOW */rn if (tcsetattr (fd, TCSANOW, &options) != 0)rn rn perror ("SetupSerial 3");rn return (FALSE);rn rn return (TRUE);rnrn[b]void set_speed([/b]int fd,int speed)rnrn int i;rn int status;rn struct termios opt;rn tcgetattr(fd,&opt);rn for(i=0;i\n",argv[0]);rn exit(1);rn */rn /*************************串口***************************************/rn printf("This program updates last time at %s %s\n",__TIME__,__DATE__);rn fd = open("/dev/ttyAT2",O_RDWR);rn if(fd < 0 )rn rn perror("open ttyUSBx failed!");rn exit(1);rn rn elsern printf("open %s successfully\n",ttyname(fd));rnrn struct sigaction signal;rnrn signal.sa_handler = fun;rn sigemptyset(&signal.sa_mask);rn signal.sa_flags = 0;rn signal.sa_restorer = NULL;rnrn sigaction(SIGIO,&signal,NULL);rnrn fcntl(fd,F_SETOWN,getpid());rn fcntl(fd,F_SETFL,FASYNC);rnrn set_speed(fd,115200);rnrn if(set_parity(fd,8,1,'N') == 0)rn rn printf("Set parity error");rn exit(1);rn rn /*************************串口***************************************/rnrnrn init_jason_link_list(&pjl);rn //init_bc_link_list(&pbl); //初始化bd conn_fd链表rn //初始化链表互斥锁rnrn if(pthread_mutex_init(&mutex_uart,NULL)<0)rn perror("pthread_mutex_init");rn exit(1);rn rn if(pthread_create(&tid3,NULL,read_from_pcUart,NULL)!=0)rn perror("pthread_create");rn exit(1);rn rn char buf[BUF_SIZE];rn char *sub_head,*sub_wail;rn [color=#FF0000]while(1) //处理收到的信息rn bzero(buf,BUF_SIZE);rn fgets(buf,BUF_SIZE,stdin);rn sub_head=substr(buf,0,4);rn if(strncmp(sub_head,"uartt",5) == 0)rn printf("111111111111\n");rn sub_wail=substr(buf,5,strlen(buf)-1);rn pthread_mutex_lock(&mutex_uart);rn printf("sub_wail=%s\n,sub_head=%s\n",sub_wail,sub_head);rn if(write(fd,sub_wail,strlen(sub_wail))<0)rn perror("uart_write_pc fail");rn rn printf("22222222\n");rn pthread_mutex_unlock(&mutex_uart);rn free(sub_head);rn free(sub_wail);rn [/color]rn rn return 0;rnrnrn
linux下串口通信的问题
我有一个串口通信程序,在linux下运行没有问题rn就是在读串口中rnread(fd,buf,1)rn要有串口输入才会继续运行否则程序就阻塞在那rn我想让他30秒左右超时,退出读串口,从刚刚开始读串口起计时rn就是说让串口读30秒后退出rn应该怎么做
linux下串口通信 读写问题
小弟最近看了下 串口通信,试着写了一个,但是现在实现了自发自接,和串口调试助手 只能发送数据,接收不到数据,找不到原因,还请各位帮忙,代码贴下
Linux下C++串口通信
Linux下C++串口通信,支持ubuntu,树莓派等系统。
linux串口特殊字符不能接收
最近在linux系统中写了个串口收发程序,通过协议与下位机通讯,期间发现某些字符老接收不到,某些字符被更改,分析及其解决方法如下: 一、只接收到数据: 0D 变成了0A  13收不到   解决此问题之前我们先看终端I/O的两种输入处理模式: (1) 规范方式输入处理。在这种方式中,终端输入以行为单位进行处理。对于每个读要求, 终端驱动程序最多返回一行。 (2) 非
文章热词 双目视觉问题 特征点问题 相机标定问题 最优化问题 统计学稳健估计问题
相关热词 c#.net 串口通信 c# 串口通信、 c++串口通信 python+串口通信的教程 python+串口通信教程