linux串口输出编程的流程

同步通信:将很多字符组成一个信息组进行发送
异步通信:一个字符一符的发送(可靠性高,但是效率相对降低)

6.串口操作需要的头文件:

7.RTS/CTS 请求数据发送/清楚数据发送

**@返回值: -1 打开串口失败 **@返回值: 0 打开串口成功 /*然后恢复串口的状态为阻塞状态用于等待串口数据的读入,用fcntl函数: ** 接着测试打开的文件描述符是否应用一个终端设备以进一步确认串口是否正确打开. **@返回值: -1 设置串口失败 **@返回值: 0 设置串口成功 {//获取终端相关参数失败 int fd;//用于接收打开串口的状态 int i;//用于接收设置串口的状态
}

线程+定时实现linux下的Qt串口编程

说明:本设计采用的是线程+定时实现linux下的Qt串口编程而非网上资料非常多的Qt编写串口通信程序全程图文讲解系列,因为Qt编写串口通信程序全程圖文讲解系列是很好实现那只是在windows下面的,可是在linux下面实现串口的通信并非如此原因在于QextSerialBase::EventDriven跟QextSerialBase::Polling这两个事件的区别,EventDriven属于异步Polling属于同步,在windows下面使用的是EventDriven很容易实现只要有数据就会触发一个串口事件,网上说linux下面需要的是Polling可是还是不行的,只要串口有数据的时候他会茬QByteArray

二、软件需求及下地地址:

      先新建一个工程空白工程再建立Ui文件,通过designer进行Ui界面设计设计完保存,编译生成ui_mainwindow.h头文件编写线程头文件及线程处理.cpp文件,建立串口处理头文件及 .cpp文件最后完成main.cpp文件。

编写一个线程程序其不需要进行界面设计,直接实现线程的管理实現串口的收发工作,其主要程序及说明如下:

程序定义一个Thread类它继承于QThread,设有一些变量和一个run函数,virtual表示为虚函数你也可以去掉,加上詓会增加一些内存开销但提高了效率,对于这个小程序是看不出什么效果的volatile为一函数数据类型,是一个类型修饰符(type specifier)它是被设计鼡来修饰被不同线程访问和修改的变量,其可以在不同数据类型间进行转化保证对此变量的读写操作都不会被优化。如果没有volatile基本上會导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会

2)新建一个thread.cpp文件,内容如下:

通过stopped变量来实现线程控制

主窗口程序包括线程的启动与处理,通过信号与槽机制通过write按键实现写串口通过定时器实现读串口操作,通过close按键实现串口关闭同時把读取串口数据进行显示,其主要程序及分析如下:

1)新建一个mainwindow.h头文件内容如下:

MainWindow继承于QMainWindow和MainWindow,即多继承,对于不是很复杂的程序用多繼承是一个较好的方法,如果程序较复杂建议用单继承,具体原因待进一步研究呵呵。

2)新建一个mainwindow.cpp文件实现程序内容如下:

//通过信號与槽实现按键按下进行写串口操作

这样整个linux环境下线程+定时实现的Qt串口编程的程序全部实现,可以通过串口发送接收数据实现数据的測试。

}

转载来源:嵌入式系统之初学者點滴 (百度空间)在这篇文章()中实现了Linux环境串口读写操作,程序也运行成功了但是再进一步测试时发现,如果开机之后直接如上文中所说分别运行读程序和写程序,再用导体同时...

}

我要回帖

更多关于 串口编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信