欢迎来到天天文库
浏览记录
ID:9094763
大小:24.50 KB
页数:5页
时间:2018-04-17
《线程定时实现linux下的qt串口编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、线程+定时实现linux下的Qt串口编程作者:lizzy115时间:2010,5,14说明:本设计采用的是线程+定时实现linux下的Qt串口编程,而非网上资料非常多的Qt编写串口通信程序全程图文讲解系列,因为Qt编写串口通信程序全程图文讲解系列是很好实现,那只是在windows下面的,可是在linux下面实现串口的通信并非如此,原因在于QextSerialBase::EventDriven跟QextSerialBase::Polling这两个事件的区别,EventDriven属于异步,Polling属于同步,在windows下面使用的
2、是EventDriven很容易实现,只要有数据就会触发一个串口事件,网上说linux下面需要的是Polling,可是还是不行的,只要串口有数据的时候他会在QByteArraytemp=myCom->readAll();这句一直读取数据,没能退出,直到断掉串口的时候才能把接受到的串口数据通过ui->textBrowser->insertPlainText(temp);打印在界面上,一直没能解决这个问题,所以只好采用线程+定时实现linux下的Qt串口编程进行设计。一、安装环境:系统平台:Ubuntu-8.04,内核2.6.24-27-ge
3、neric,图形界面二、软件需求及下地地址:Qt版本qt-linux-SDK-4.6.2注意:此处使用的是qt-linux-SDK-4.6.2版本,编译通过了,之后需要把他移植到qt-embedded-linux-opensource-src-4.5.3.tar.gz,通过qte编译后移植到开发板中,采用的测试开发板为Micro2440,下载地址:略三、程序编写过程:程序编程流程:先新建一个工程空白工程,再建立Ui文件,通过designer进行Ui界面设计,设计完保存,编译生成ui_mainwindow.h头文件,编写线程头文件及线程处
4、理.cpp文件,建立串口处理头文件及.cpp文件,最后完成main.cpp文件。1、Ui文件的设计:建立Ui_MainWindow主窗口,在窗口上添加三个QPushButton,分别命名为closeButton、writeButton、readButton,再添加一个QTextBrowser显示串口接收数据,保存退出,编译一下就可以生成ui_mainwindow.h文件。2、线程程序设计:编写一个线程程序,其不需要进行界面设计,直接实现线程的管理,实现串口的收发工作,其主要程序及说明如下:1)新建一个thread.h头文件,内容如下:#
5、ifndefTHREAD_H#defineTHREAD_H#includeclassThread:publicQThread{Q_OBJECTpublic:Thread();charbuf[128];volatileboolstopped;volatileboolwrite_rs;volatileboolread_rs;protected:virtualvoidrun();};#endif程序定义一个Thread类,它继承于QThread,设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会
6、增加一些内存开销,但提高了效率,对于这个小程序是看不出什么效果的,volatile为一函数数据类型,是一个类型修饰符(typespecifier)。它是被设计用来修饰被不同线程访问和修改的变量,其可以在不同数据类型间进行转化,保证对此变量的读写操作都不会被优化。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。2)新建一个thread.cpp文件,内容如下:#include"thread.h"#include#include#incl
7、ude#include//串口用到的#include#include#include#include#defineBAUDRATEB9600#defineRS_DEVICE"/dev/ttyS0"//串口1//#defineRS_DEVICE"/dev/ttySAC1"//串口1Thread::~Thread(){}//析构voidThread::run()//这就是线程的具体工作了{intfd,c=0,res;str
8、ucttermiosoldtio,newtio;//termios结构是用来保存波特率、字符大小等printf("start...");fd=open(RS_DEVICE,O_RDWR
9、O_NOCTTY
此文档下载收益归作者所有