Linux下串口通信异常的问题

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

1

1个回答

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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下串口的设置,以及minicom的设置和linux串口设置函数的相关分析。
linux下串口通信的问题
我有一个串口通信程序,在linux下运行没有问题rn就是在读串口中rnread(fd,buf,1)rn要有串口输入才会继续运行否则程序就阻塞在那rn我想让他30秒左右超时,退出读串口,从刚刚开始读串口起计时rn就是说让串口读30秒后退出rn应该怎么做
求教:Linux下串口通信问题
我在Linux下用termios编程设置了/dev/ttyS0串口的属性,但只能往串口写,不能读串口,rn用read函数总是返回-1,这是为什么?
linux下串口通信 读写问题
小弟最近看了下 串口通信,试着写了一个,但是现在实现了自发自接,和串口调试助手 只能发送数据,接收不到数据,找不到原因,还请各位帮忙,代码贴下
linux下串口通信
linux下串口通讯的标准程序。只要编译即可以使用。
Linux下的串口通信
移植了一个简单的开发板与pC机的串口通信,代码如下rn/*发送字符*/rn#includern#includern#includern#includern#includern#includern#includern#includern#define buffer_size 100rnvolatile fd;rnint flag_close;rnint open_serial(int k)rnrnif(k==0)rnrnfd=open("/dev/ttySAC0", O_NOCTTY |O_NONBLOCK);rnperror("open /dev/ttySAC0");rnrnelsernrnfd=open("/dev/ttySAC1",O_RDWR);rnperror("open /dec/ttySAC1");rnrnif(fd==-1)rnreturn -1;rnelsernreturn 0;rnrnrnint main(int argc,char *argv[])rnrnchar sbuf[]="hello\n";rnint retv,i;rnstruct termios opt;rnint length=sizeof(sbuf);rnopen_serial(0);rnprintf("ready for sending data");rntcgetattr(fd,&opt);rntcflush(fd,TCIOFLUSH);rncfmakeraw(&opt);//设置终端属性rncfsetispeed(&opt,B115200);rncfsetospeed(&opt,B115200);rn/*设置8位数据位*/rnopt.c_cflag &=~CSIZE;rnopt.c_cflag |=CS8;rn/*设置奇偶校验*/rnopt.c_cflag &=~PARENB;rnopt.c_cflag &=~INPCK;rntcsetattr(fd,TCSANOW,&opt);rnretv=write(fd,sbuf,length);//将数据写入终端不需要1位1位的写吗?rnif(retv==-1)rnrnperror("write");rnrnrnprintf("the number of char sent is %d\n",retv);rnflag_close=close(fd);rnif(flag_close==-1)rnprintf("close the device failur!\n");rnreturn 0;rnrn结果运行时显示错误为:open /dev/ttySAC0: No such file or directoryrnwrite: Bad file descriptorrnready for sending datathe number of char sent is -1rnclose the device failur!rn初学,有没有人能耐心看一下,指导一下,谢谢!rn 61,1 92%rnrn
Linux下串口通信
1,串口操作 #include "uart.h" #define FALSE -1 #define TRUE 0 int uart_set(int fd,int bautrate,int flow_ctl, int databites,int stopbits, int parity) { int i = 0; int baut_rate[]={B115200,B1
linux下的串口通信
我用的qextserialport的第三方,使用qt creator对开发板的数据进行接收并显示,仿照网上的qt串口通信教程,可是最后一步显示could not open file! Error code:5 。我不明白是什么原因。这算是没打开串口吗?
LINUX下串口通信
LINUX 下串口通讯程序,各个文件很清楚,makefile文件都给你写好了,可直接编译,还有通讯的截图
LInux下的串口通信
我在Linux下写了下面这样一个串口通信的程序:rn[code=c]rn#include rn#include rn#include rn#include /* File control definitions */rn#include rn#include /* POSIX terminal control definitions */rnrnrnint main(void)rnrn int fd; /* File descriptor for the port */rn char buf[100];rnrn fd = open("/dev/ttyS0", O_RDWR);rn if (fd == -1)rn rnrn fputs("open_port: Unable to open /dev/ttyS0 -\n", stderr);rn return -1;rn rnrnrn struct termios oldoptions;rn struct termios options;rn memset(&options, 0, sizeof(options));rn rn if(tcgetattr(fd, &oldoptions) != 0) rn rn printf("getting options failed!\n"); rn return -1;rn rn rn rn tcflush(fd, TCIOFLUSH);rn cfsetispeed(&options, B9600);rn cfsetospeed(&options, B9600);rn options.c_cflag |= (CLOCAL | CREAD);rn rn if(tcsetattr(fd, TCSANOW, &options) != 0) rn rn printf("setting options failed!\n"); rn return -1;rn rnrn options.c_cflag &= ~PARENB;rn options.c_cflag &= ~CSTOPB;rn options.c_cflag &= ~CSIZE;rn options.c_cflag |= CS8;rnrn options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);rn options.c_oflag &= ~OPOST;rn rn rn if(tcsetattr(fd, TCSANOW, &options) != 0) rn rn printf("setting options failed!\n"); rn return -1;rn rnrn int n, i;rn char tmp[] = "serial port test...\n";rn for(i = 0; i < 5; i++)rn rn/*rn printf("write to the serial port...\n");rn n = write(fd, tmp, sizeof(tmp));rn if (n < 0)rn rn fputs("write() failed!\n", stderr);rn return -1;rn rn*/rn printf("read the serial port...\n");rn n = read(fd, buf, sizeof(buf));rn if (n < 0)rn rn fputs("read() failed!\n", stderr);rn return -1;rn rn printf("receive %d characters\n", n);rn buf[n] = '\0';rn rn printf("%s\n", buf);rn rn if(tcsetattr(fd, TCSANOW, &oldoptions) != 0) rn rn printf("setting options failed!\n"); rn return -1;rn rn rn close(fd);rnrnrnrn[/code]rn上面的程序交叉编译后放在arm开发板上,准备和PC的串口进行通信。PC上使用串口调试助手。测试的结果是,在串口调试助手没有发送任何字符时,上面的串口程序中的read函数不会阻塞,直接返回,打印收到0个字符。请问如果我想让read函数阻塞在那里,应该怎么做?rn另外,这个串口程序只能正确接收一次PC发送的字符,后面不管PC端发送什么,上面的程序就一直显示收到0个字符。但是如果我在read之前再加个write函数,也就是write和read交替执行,那么read函数能正确读取串口的输入,不过此时read函数还是非阻塞的。请问该怎么解决?
关于linux下gprs串口通信的问题
rn 大家好:rnrn 目前实验室有一款gprs模块,我参考了ibm中关于linux串口通信的程序,目前可以实现从串口读数据上来,例如将开发板rn 通过串口与pc相连,可以查看到开发板bootloader和linux内核的启动信息,可向其串口发送at命令,没有结果,思来想去rn 不得其解呀,不知道谁遇到过类似的问题?多谢了,下面是我的一些主要代码,主要参考了rnrn if(geteuid())rn rn fprintf(stderr,"you must be root\n");rn exit(1);rn rnrn int fd;rn int nread;rn char buff[10];rn if((fd = open_tty()) < 0)rn rn perror("open error");rn exit(1);rn rnrn printf("speed %d\n",speed); rn set_speed(fd,speed); //设置为115200rn if(set_parity(fd,8,1,'N') == FALSE)//设置数据位和停止位rn rn perror("set parity error");rn exit(0);rn rnrn //set_msethwf(fd,on);rnrn printf("send at command\n");rn write(fd,buf,3);//buf为“AT\r”rn rn while(1)rn rn if((nread = read(fd,buff,10)) > 0)rn rn printf("%d len\n",nread);rn buff[nread+1] = '\0';rn printf("%s\n",buff);rn //break;rn rn if(nread == -1)rn rn perror("read error");rn break;rn rn rn close(fd);rn
STM8L 串口通信波特率异常
           串口配置 2400/9600/57600/115200 波特率出现异常            使用16M时钟的时候,2400和115200不正常,乱码,但是在这中间频率又是好的;修改时钟才能适应不同时钟频率。。。;看寄存器配置是完全没有问题的。            经过分析,是因为在配置串口波特率的时候BBR1,BBR2的配置顺序有问题引起的。            ...
win32 串口通信接收数据异常
在使用win32进行串口通信编程时,发送数据可以成功,但是接收数据发现数据错乱。rn发送方发送的数据为:(16进制)11 11 11 11 22 22 22 22 33 33 33 44 rn接收方收到的数据为:[img=https://img-bbs.csdn.net/upload/201804/27/1524818049_300825.png][/img]rnrn发送是通过串口调试助手做的:[img=https://img-bbs.csdn.net/upload/201804/27/1524818089_96450.png][/img]rnrn接收方代码如下:rnrntypedef struct NormalCommandrnrn unsigned char szDataBuffer[MAX_LEN];rn int dataLen;rnrn NormalCommand()rn rn memset(szDataBuffer, 0, MAX_LEN);rn dataLen = 0;rn rnrnstruNormalCommad;rnrnint ReadNormalAnswer(HANDLE Handle, struNormalCommad* commandTmp)rnrn if (Handle == INVALID_HANDLE_VALUE)rn rn return FALSE;rn rnrn DWORD realRecvLen = 0;rn DWORD curLen = 0;rn BOOL ret = FALSE;rnrn DWORD Error;rn COMSTAT cs = 0 ;rnrn while (1)rn rn ClearCommError(Handle, &Error, &cs);rnrn //MAX_HEAD_LEN 13 内部约定的数据包头长度。rn ret = ReadFile(Handle, commandTmp->szDataBuffer + curLen, MAX_HEAD_LEN, &realRecvLen, NULL);rn if (ret != FALSE)rn rn if (realRecvLen == 0)rn rn PurgeComm(Handle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);rn return FALSE;rn rn curLen += realRecvLen;rn commandTmp->dataLen += realRecvLen;rnrn int leftLen = AnalyzeDataLen(commandTmp);rn if (leftLen > 0)rn rn ClearCommError(Handle, &Error, &cs);rnrn ret = ReadFile(Handle, commandTmp->szDataBuffer + curLen, leftLen, &realRecvLen, NULL);rn if (ret != FALSE)rn rn if (realRecvLen == 0)rn rn PurgeComm(Handle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);rn return FALSE;rn rn curLen += realRecvLen;rn commandTmp->dataLen += realRecvLen;rn return TRUE;rn rn rn elsern rn return TRUE;rn rn rn rnrn return TRUE;rn
linux下串口通信程序
linux下串口通信程序 gcc编译通过,真实可用
在linux下如何实现串口通信?
用open打开设备文件后是不是必须设置串口参数才能进行通信?rnrn在linux下一个串口对应了两个设备文件(?)如com1对应着/dev/ttyS0与rnrn/dev/cau0(?).要通过com1口通信(读写)是不是必须打开这两个设备文件才行?rnrn我写了一个小程序(没有设置串口参数,只打开了ttyS0).每次都向com1写,再rnrn从com1中读出。write函数返回了大于0的值(不知道是否真得已经写了进去).用ioctlrnrn取得串口中的数据量,结果每次都是0.为什么?rnrn
linux下的串口通信题?
请问如何在linux实现C语言的串口通信?如果谁有这样的例程,请给我发邮件tb01412@sina.com
Linux下C++串口通信
Linux下C++串口通信,支持ubuntu,树莓派等系统。
linux下的串口通信调试方法
linux下的串口通信调试方法
Linux下JAVA串口通信
 费了好大的劲搞定Linux系统上用Java写串口通信的问题。 jdk中没有原生的串口api,网上找了半天的资料,大概知道了:Linux系统上用Java写串口程序,有两个包比较常用,一个是当年sun官方出的javacomm,但是找了半天都是老版本的居多,oracle官方不提供下载了,不爽。另一个是gnu的rxtx comm,看了一下还算靠谱,不过官方的wiki上(http://rxtx.q
linux下串口通信实践1
1、PC端串口助手像单片机32完全可以实现串口间的通信,Linux下的串口通信和PC上的有什么区别? 2、老师给了我程序,编译一下就可以吗,它跑出来的结果有什么不同,用的4412开发板。 tty是teletype最早出现的一种终端设备的缩写,Linux中用tty表示 终端 console控制台就是用户与系统进行交互的设备,与终端相似。 终端与控制台的区别,控制台可以显示系统信息比如内核消息、...
Linux下串口通信的小问题
如何实现串口编程中退格删除字符的功能?
linux下的QT串口通信
本人QT新手,现在大家在linux下用qt做串口通信一般是用的第三方类,还是自己用QIODevice写的?如果有用的比较好的第三方类麻烦推荐学习一下,谢谢~~
linux下QT开发串口通信助手
串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要。下面将一步一步叙述开发过程: 1.下载第三方QT串口类 2、首先来看一下串口通信几个关键文件: posix_qextserialport.cpp和posix_qextserialport.h文件定义了一个Posix_QextSerialPort类; qextserialbase.cpp和qextserialbase.h文
嵌入式linux下串口通信
写嵌入式linux串口协议和驱动的最全的资源,大家可以参考
linux下的串口通信程序详解
linux下的串口通信程序详解,里面 有详细的步骤,而且还有代码例子!
linux下串口通信帖子汇总
最近,关于串口通信的帖子发问的比较多。给大家提供几个很好的帖子。rnrn[color=#FF0000]串口编程入门:[/color]rnrn[color=#99CC00]写的非常好。[/color]rnrnrn[url=http://www.ibm.com/developerworks/cn/linux/l-serials/index.html]http://www.ibm.com/developerworks/cn/linux/l-serials/index.html[/url]rnrn对于串口,大家不能发送接收,数据,或者只有一方能接收或者发送,都是串口设置的问题。rnrn大家可以把自己串口通信的经验在后面进行回复,以便他人查看。我想抽个时间把串口通信的问题汇总。rnrn以下是我在CSDN找到的几个比较经典串口通信帖子(里面的问题很可能不是大家要的):rn但是,通过他人的回帖,也可以找到自己的问题所在。rnrnrn[url=http://topic.csdn.net/u/20100803/10/c79dbf91-caf5-4edd-9fce-562be7f64b66.html]http://topic.csdn.net/u/20100803/10/c79dbf91-caf5-4edd-9fce-562be7f64b66.html[/url]rnrn[url=http://topic.csdn.net/u/20100802/17/0951fcd3-3b83-4a17-b17e-cd17d1dcb2c0.html]http://topic.csdn.net/u/20100802/17/0951fcd3-3b83-4a17-b17e-cd17d1dcb2c0.html[/url]rnrn[url=http://topic.csdn.net/t/20030529/11/1849267.html]http://topic.csdn.net/t/20030529/11/1849267.html[/url]rnrn[url=http://topic.csdn.net/t/20031223/10/2592945.html]http://topic.csdn.net/t/20031223/10/2592945.html[/url]rnrnrn[url=http://topic.csdn.net/u/20090630/17/1A96B781-7893-4317-85BA-01199619FA30.html]rnhttp://topic.csdn.net/u/20090630/17/1A96B781-7893-4317-85BA-01199619FA30.html[/url]rnrn[url=http://topic.csdn.net/t/20030612/11/1906697.html]http://topic.csdn.net/t/20030612/11/1906697.html[/url]rnrnrn[url=http://topic.csdn.net/u/20070603/16/3D6AA4C7-586E-451E-A43E-21B1E6D37258.html]http://topic.csdn.net/u/20070603/16/3D6AA4C7-586E-451E-A43E-21B1E6D37258.html[/url]rnrn[url=http://topic.csdn.net/u/20100618/09/C6F27D20-8E50-43BC-A982-D5F4830BC06A.html]http://topic.csdn.net/u/20100618/09/C6F27D20-8E50-43BC-A982-D5F4830BC06A.html[/url]
linux下多线程同步串口通信
主要完成:根据特定的通信协议实现串口与PC上特定串口通信软件的通信。测试版,只是完成主要框架,没有完全将协议的所有通信方式方法做完。其中包含的测试功能有:监听主机(PC上的软件)发送的特定请求,能够识别类型,并解析包含里面的信息,并且自动回复,所写的根据协议要求的固定消息结构体。
Linux下QT串口通信
Linux下QT串口的相关文件,及QT串口例程。
在Linux下编写串口通信详解
在Linux下以QT Creator编写串口通信详细讲解。
Linux下C语言串口通信
/*本文是在参考实验室某学长的博客后再自行写下的代码,因学长代码逻辑十分清楚,给我留下了很深的印象,所以我的代码有很多地方与这位学长的代码相似。同时我也在这位学长的代码上做了稍许改进和修正。如有不当之处,欢迎批评*/最近在做一个GPS项目,第一部分是将开发板和GPS用串口通信,接受GPS上传来的数据。Linux下所有的设备都是以文件形式存储的,串口也是。整个串口通信的流程图为:所用到的头文件为:#...
linux下串口通信实践2
昨天失败了, 找了两个串口通信工具cu和screen,终端输入cu或screen按提示安装就行。
linux下串口通信问题,请高手上门服务。着急!!!
昨天,给中科院某研究所装一套UPS电源,需配套电源监控软件,对LINUX 不懂,按照提示,装完后,无法和UPS 通信,想请高手上门帮我看看。我出些车马费。
android_serialport_api 串口通信 new SerialPort异常
代码 :执行 su = Runtime.getRuntime().exec("/system/bin/su"); 就被try catch了nnpublic SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException n /* Check access permission */n if (!device.canRead() || !device.canWrite()) n try n /* Missing read/write permission, trying to chmod the file */n Process su;n su = Runtime.getRuntime().exec("/system/bin/su");n String cmd = "chmod 777 " + device.getAbsolutePath() + "\n"n + "exit\n";n su.getOutputStream().write(cmd.getBytes());n if ((su.waitFor() != 0) || !device.canRead()n || !device.canWrite()) n throw new SecurityException();n n catch (Exception e) n e.printStackTrace();n throw new SecurityException();n n n Log.e("Tag", "串口打开...");n mFd = open(device.getAbsolutePath(), baudrate, flags);n Log.e("Tag", "串口打开成功");n n if (mFd == null) n throw new IOException();n n mFileInputStream = new FileInputStream(mFd);n mFileOutputStream = new FileOutputStream(mFd);n n nn```n 错误信息:n11-24 18:58:45.459: E/ActivityManager(412): ANR in com.zxsd.airdetectionn11-24 18:58:45.459: E/ActivityManager(412): PID: 4736n11-24 18:58:45.459: E/ActivityManager(412): Reason: Executing service com.zxsd.airdetection/com.zxsd.Server.AirServern11-24 18:58:45.459: E/ActivityManager(412): Load: 0.21 / 0.23 / 0.18n11-24 18:58:45.459: E/ActivityManager(412): CPU usage from 9647ms to 0ms ago with 99% awake:n11-24 18:58:45.459: E/ActivityManager(412): 0.7% 100/surfaceflinger: 0.4% user + 0.3% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.6% 412/system_server: 0.1% user + 0.5% kernel / faults: 3 minorn11-24 18:58:45.459: E/ActivityManager(412): 0.6% 472/com.android.systemui: 0.4% user + 0.2% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.2% 28/fb-vsync: 0% user + 0.2% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.2% 823/RTW_CMD_THREAD: 0% user + 0.2% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.1% 1//init: 0% user + 0.1% kernel / faults: 28 minorn11-24 18:58:45.459: E/ActivityManager(412): 0.1% 23/irq/58-rk30-adc: 0.1% user + 0% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.1% 26/fb-vsync: 0% user + 0.1% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.1% 103/mediaserver: 0.1% user + 0% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.1% 120/adbd: 0% user + 0.1% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0% 1147/com.google.process.gapps: 0% user + 0% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.8% TOTAL: 0.2% user + 0.4% kernel + 0.1% softirqn11-24 18:58:45.459: E/ActivityManager(412): CPU usage from 1923ms to 2435ms later:n11-24 18:58:45.459: E/ActivityManager(412): 3.9% 412/system_server: 0% user + 3.9% kerneln11-24 18:58:45.459: E/ActivityManager(412): 1.9% 426/ActivityManager: 0% user + 1.9% kerneln11-24 18:58:45.459: E/ActivityManager(412): 0.5% TOTAL: 0% user + 0.5% kernelnn```nn
串口通信:端口打开的异常信号捕捉
在MFC中使用控件进行串口编程,程序如下:rnrnm_Serial.SetCommPort(3); //指定串口号 rnif(!m_Serial.GetPortOpen())rn m_Serial.SetPortOpen(TRUE); //打开串口rnrn如果串口3不存在,打开操作会产生异常,这个异常怎么捕捉到,作进一步处理呢?rnrn谢谢关注。rn
求Linux下串口通信程序的源代码
求Linux下串口通信程序的源代码
linux下串口通信例程(按键控制)
基于linux下的串口通信例程,通过向内核加载矩阵键盘的驱动,实现扫描某个键盘按下后,发送,,,。当按下另外一个按键时,发送另外一个数据。本实验已在三星6410平台上移植成功了。 请下载时注意下载键盘驱动程序
linux下串口通信的调试和硬件检测
<br />我第一次在在这里写我的动手经历,,紧张而又机动,,活波而又萧瑟,,我只是记录我的工作历程,,希望有机会看到文章的人可以指点,,加深我的印象,,谢谢您。。<br />我们开始吧,<br />首先,我们既然要实现读取linux下串口的东西,我们就得先了解在LINUX下的这些串口是怎样的东西。。<br />LINUX下,存在一个/dev的设备目录,该目录下存有指向系统中硬件的特殊文件。这些指向硬件的设备文件,简化了我们的操作,我们可以像访问普通文件一样来访问硬件,无需使用特殊的接口函数。。<br />
基于linux下串口通信例程(按键驱动)
基于linux下的串口通信例程,通过向内核加载矩阵键盘的驱动,实现扫描某个键盘按下后,发送。当按下另外一个按键时,发送另外一个数据。本实验已在三星6410平台上移植成功了。 此为键盘驱动程序直接加载到内核即可(内核版本2.6.21)
关于linux下串口通信传输换行符
新手初次编写,如有错误请多指正。在做硬件远程控制时,一般都会需要在包的末尾加一个回车符来判断命令发送完成。而用scanf输入到buff的时候会遇到按下回车,输入就结束了。曾试过多种方法,始终无法在发送的数据里加入空格符。现在偶然发现一个很方便的办法,即将scanf()函数改为fgets()函数输入。这样你所输入时按下回车键,即会退出输入,也会将回车符录入到包里。原:scanf(“%s”,buff)...