- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux通讯
线程+定时实现linux下的Qt串口编程
2010-06-26 10:49
转:
线程+定时实现linux下的Qt串口编程
作者:lizzy115????? 时间:2010,5,14
说明:本设计采用的是线程+定时实现linux下的Qt串口编程,而非网上资料非常多的Qt编写串口通信程序全程图文讲解系列,因为Qt编写串口通信程序全程图文讲解系列是很好实现,那只是在windows下面的,可是在linux下面实现串口的通信并非如此,原因在于QextSerialBase::EventDriven跟QextSerialBase::Polling这两个事件的区别,EventDriven属于异步,Polling属于同步,在windows下面使用的是EventDriven很容易实现,只要有数据就会触发一个串口事件,网上说linux下面需要的是Polling,可是还是不行的,只要串口有数据的时候他会在QByteArray temp = myCom-readAll(); 这句一直读取数据,没能退出,直到断掉串口的时候才能把接受到的串口数据通过ui-textBrowser-insertPlainText(temp);打印在界面上,一直没能解决这个问题,所以只好采用线程+定时实现linux下的Qt串口编程进行设计。
一、安装环境:
系统平台:Ubuntu-8.04,内核2.6.24-27-generic,图形界面
二、软件需求及下地地址:
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头文件,编写线程头文件及线程处理.cpp文件,建立串口处理头文件及 .cpp文件,最后完成main.cpp文件。
1、?????????? Ui文件的设计:
建立Ui_MainWindow主窗口,在窗口上添加三个QPushButton,分别命名为closeButton、writeButton、readButton,再添加一个QTextBrowser显示串口接收数据,保存退出,编译一下就可以生成ui_mainwindow.h文件。
2、线程程序设计:
编写一个线程程序,其不需要进行界面设计,直接实现线程的管理,实现串口的收发工作,其主要程序及说明如下:
1) 新建一个thread.h头文件,内容如下:
#ifndef THREAD_H
#define THREAD_H
#include
class Thread:public QThread
{
Q_OBJECT
public:
Thread();
char buf[128];
volatile bool stopped;
volatile bool write_rs;
volatile bool read_rs;
protected:
virtual void run();
};
#endif
程序定义一个Thread类,它继承于QThread,设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会增加一些内存开销,但提高了效率,对于这个小程序是看不出什么效果的,volatile为一函数数据类型,是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量,其可以在不同数据类型间进行转化,保证对此变量的读写操作都不会被优化。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
2)新建一个thread.cpp文件,内容如下:
#includethread.h
#include
#include
#include
#include ??? //串口用到的
#include
#include
#include
#include
#define BAUDRATE B9600
#define RS_DEVICE /dev/ttyS0?????? //串口1
//#define RS_DEVICE /dev/ttySAC1?????? //串口1
Thread::Thread()
{}???????????????????????????????????????????????? //析构
void Thread::run()????????? //这就是线程的具体工
您可能关注的文档
最近下载
- 大作业:如何理解“作风建设永远在路上,永远没有休止符”?我们应如何加强作风建设?.docx VIP
- 教师实习心得:教育反思与教师实习心得:有效的教学离不开有效的反思合集.doc VIP
- 《中华人民共和国基本医疗卫生与健康促进法》全文.pdf VIP
- 代数式的值-新浙教版-七上数学.pptx VIP
- 浙教版初中数学八年级上册第二章《特殊三角形》单元测试卷(含答案解析)(困难).docx VIP
- 浙教版初中数学八年级上册第二章《特殊三角形》单元测试卷(含答案解析)(标准困难).docx VIP
- 村两委换届调研报告大全一.doc VIP
- 2024-2030年中国面食行业市场深度分析及前景趋势与投资研究报告.docx
- 《护士条例》落实情况监督检查表.docx VIP
- 中国宠物行业2025年宠物医疗市场发展趋势与挑战分析报告.docx
文档评论(0)