欢迎来到天天文库
浏览记录
ID:42816964
大小:38.00 KB
页数:8页
时间:2019-09-22
《基于.Qt的多线程嵌入式系统设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、....基于Qt的多线程嵌入式系统设计与实现作者:向明尚张志华潘丽艳来源:《科技与创新》2017年第04期 摘要:以飞凌6410开发板上的外部设备为例,介绍了GPIO工作原理,讲解了Linux字符驱动程序的工作原理和设计步骤,介绍了Linux内核模块设计、编译、加载和卸载等的实现方法,阐述了嵌入式系统图形用户界面Qt的应用和多线程工作机制,给出了软硬件的设计方法,以完成多线程嵌入式控制系统的设计。 关键词:字符设备;驱动程序;多线程;嵌入式系统 中图分类号:TP368.1文献标识码:ADOI:10.15913/j.cn
2、ki.kjycx.2017.04.011 嵌入式系统被广泛应用于航天、航空、铁路、公路、汽车和家居生活等各个领域。系统中有大量的外部设备,比如用于测量温度、压力、流量和速度等的传感器,以及马达、电机等执行机构。这些外部设备往往需要协同、并行工作,即所谓的多任务、实时系统,对系统的设计有较高的要求。设计系统时,既要考虑每一个外部硬件设备能够可靠工作,又要考虑多个设备之间的资源共享,所以,软件、硬件系统的设计要考虑到多任务、实时性的要求。Linux操作系统因其多任务、实时性的特点,被广泛应用于嵌入式系统的设计中。Qt作为一种基于C++跨平台GUI系统
3、,能够为用户提供构造图形界面的强大功能,提供丰富的多线程支持,并被应用于嵌入式系统的GUI设计中。本文基于Linux+Qt,实现了多任务、多线程嵌入式控制系统。 1字符设备驱动程序工作原理 对于嵌入式系统中的外部设备,有一大类在Linux系统中被定义为字符设备,它需要专用的设备驱动程序驱动才能正常工作。Linux设备驱动程序是为了特定的硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。它是用来控制和管理硬件设备、完成数据传送的专用软件,是用户的应用程序与外部设备信息交换的桥梁。设备驱动程序作为操作系统的一部分运行在操作系统
4、内核中,用户的应用程序通过系统调用与内核打交道,内核根据系统通调用号来调用相应的驱动程序所对应的接口函数,实现对外部设备的管理。Linux中字符设备驱动程序以内核模块的形式编写,驱动程序的加载方式之一就是采用内核模块方式动态加载,具有灵活、高效的特点。资料整理.... Linux的字符设备是能够像字节流一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序的设计,就是实现设备的读写、控制接口,即实现Linux的核心结构体file_operation。该结构体是Linux虚拟文件系统的文件接口,其中定义了用于设备操作的各种接口函数。在
5、设计设备驱动程序时,只需要实现结构体中的有关函数即可,比如设备的打开、读、写、控制、关闭所对应的open、read、wtite、ioctl、release等函数,即可像操作普通文件一样来管理设备。Linux系统为每一个设备分配一个主设备号和次设备号,驱动程序以主设备号、次设备号唯一标示一个具体的外设,比如开发板上的LED、按键、蜂鸣器、温度传感器和AD转换器,等等。 2Qt多线程工作机制 嵌入式系统大多是多任务、实时系统,多个外部设备同时并行工作,实时性要求比较严格。因为对用户系统的设计要求比较高,所以,引入了多线程技术。
6、 在Qt系统中,与线程有关的类是与平台无关的QThread类,提供线程的创建、运行、管理等多种方法。线程通QThread类run函数重载执行。应用程序要想执行自己的线程,需要继承QThread类,实现run函数即可。GUI运行主线程,从窗口获取事件,并分发给相应的组件处理,即实现主线程、子线程多个线程之间并发执行,保证系统对多个外部设备的及时响应。为了实现多个线程之间的通信,Qt提供了一整套工作机制。 Qt系统中引入“可重入”“线程安全”的概念来说明函数与线程之间的关系。“可重入”继承于C++,它指的是一个类的函数在该类的不同实例上可以被多个
7、线程调用,则该类是“可重入”的;“线程安全”指的是不同的线程作用于同一个实例上可以正常工作。 Qt提供的信号和槽机制支持跨线程连接,方便了GUI主线程与子线程之间的通信,其连接方式有3种:①直接连接。当信号发出时,对应的槽函数立即调用执行。槽函数在发出信号的线程中执行,而不一定在接收对象所属的线程中执行。②排队连接。信号发出后,要等到接收对象所属线程的时间循环取得控制权时再调用对应的槽函数,并在信号接收对象所属的同一个线程中执行。③自动连接。这是Qt默认的连接方式。信号的发出与接收信号的对象在同一个线程,则工作在直接连接方式,否则工作在排队方式。
8、 对于Qt线程与事件循环
此文档下载收益归作者所有