课程设计报告
课程名称
嵌入式系统课程设计
项目名称 基于 ARM 的数字式万年历电子时钟
姓
班
学
名
级
号
指导教师
老师
设计时间 2019 年 2 月 25 日 至 2019 年 3 月 1 日
计算机工程学院
目录
一、 项目要求...................................................................................................................................................................... 1
1.1、 程序要求............................................................................................................................................................. 1
1.2 、开发要求............................................................................................................................................................. 1
1.3、运行要求............................................................................................................................................................... 1
二、 项目开发环境.............................................................................................................................................................. 1
2.1、硬件环境:........................................................................................................................................................... 1
2.2、软件环境:........................................................................................................................................................... 1
三、 项目分析...................................................................................................................................................................... 2
3.1 、QT........................................................................................................................................................................ 2
3.11、QT 简介...............................................................................................................................................................2
3.12、QT 安装...............................................................................................................................................................2
3.13、建立 QT 交叉编译环境......................................................................................................................................3
3.14、信号与槽机制的优点......................................................................................................................................... 6
四、 设计与实现................................................................................................................................................................ 10
4.1 设计思路................................................................................................................................................................ 10
4.2、设计和实现的主要内容..................................................................................................................................... 12
4.3、Makefile 文件......................................................................................................................................................16
4.4、运行效果图......................................................................................................................................................... 17
五、 总结............................................................................................................................................................................ 18
六、 参考文献.................................................................................................................................................................... 19
附录:项目分工说明.......................................................................................................................................................... 20
考核情况(由指导老师填写).......................................................................................................................................... 21
一、项目要求
1.1、程序要求
(1)显示年、月、日和时间,支持 QT 显示;
(2)时间日期设置功能,闹钟设置功能,整点报时功能;
(3)显示当日周数功能,显示当月日历功能;
(4)支持触摸屏操作和小键盘输入
1.2 、开发要求
在 Windows 下的 QT 上编写程序,通过 Ubuntu 下的 Linux 将 QT 移植到 arm 开发板上,
交叉编译后生成可执行文件
1.3、运行要求
通过串口连接计算机和开发实验箱,通过串口调试在实验箱上的显示屏上运行万年历
二、项目开发环境
2.1、硬件环境:
嵌入式 CES-EDU4412 教学实验箱
2.2、软件环境:
Windows10 系统笔记本电脑、QT、串口调试软件、VMware 下的 Ubuntu
1
三、项目分析
3.1 、QT
3.11、QT 简介
QT 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司于 1995 年底出
品。Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员
就已经开始设计 QT 了,QT 的第一个商业版本于 1995 年推出。2008 年 1 月 31 日,Nokia
公司宣布通过公开竞购的方式收购 TrollTech 公司,旗下包括 QT 在内的技术都归入 Nokia
旗下。并且 Nokia 针对自己的移动设备平台规划的需要,将 QT 按不同的版本发行,QT
商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的
免费升级和技术支持服务。QT 开源版:仅仅为了开发自由和开放源码软件, 提供了和商
业版本同样的功能。GNU 通用公共许可证下,它是免费的。2009 年 3 月发布的 QT 4.5 起,
诺基亚为 QT 增添开源 LGPL 授权选择。2009 年 5 月 11 日起,诺基亚 QT Software 宣布
QT 源代码库面向公众开放,QT 开发人员可通过为 QT 以及与 QT 相关的项目贡献代码、
翻译、示例以及其他内容,协助引导和塑造 QT 未来的发展。为了便于这些内容的管理,
QT Software 启用了基于 Git 和 Gitorious 开源项目的 Web 源代码管理系统 。
3.12、QT 安装
Qt 具有跨平台性,支持多种平台。在本书中开发 Qt 程序要用到两种开发环境,-种是
在 Linux 中安装 Qt,用于在计算机上开发 Qt 应用程序;另外一种是在 Linux 中安装 Qt for
embedded Linux, 这是个 Qt 开发环境,能够编译可以在 ARM 开发板上运行的程序。Qt
程序的安装包都可以在其官网上免费获取(http://www. trolltech. com)。既可以下载 Qt 的
SDK 包,也可以下载 Qt 库。Qt 的 SDK 包中包含有 Qt 包、Qt Creator IDE 和 Qt development。
2
安装 Qt 的 SDK 包与正常的 Linux 系统中安装图形应用程序--样,直接将程序运行之后单
击下--步直到结束就可以了,最后在系统的配置文件中配置相应的环境变量(与安装库时环
境变量的配置方法相同)。SDK 包所打包的文件是二进制包,安装过程比较简单,也比较
快。建议大家安装 Qt 的 SDK 版本。安装 SDK 包的主要步骤:
(1)下载 Qt_ SDK_ Lin32_ offline_ v1_ 1_ 3_ en. run;
(2)赋予可执行权限 chmod 755 Qt_ SDK_ Lin32_ _offline_ v1_ 1 _3_ en. run;
(3)运行./Qt_ SDK Lin32_ offline_v1_1_3_en.run;
(4)安装完成之后,安装相应的字体库和设置相应的环境变量(下一种方法会详细地讲解)。
3.13、建立 QT 交叉编译环境
交叉编译器
嵌入式系统中应用程序的开发有别于普通的 PC 程序的开发,主要表现在程序的编辑、
编译和程序的运行不在同一台设备上,通常前者在开发机(PC)上,后者在嵌入式设备(ARM
开发板)上。这样就要求在进行实际开发前必须要搭建基于 ARM 的嵌入式 Linux 交叉编
译环境。
编译能够运行在 ARM 上的可执行程序,要用到 arm- linux-g++交叉编译器 ARM 体系
结构上用到的指令集是 ARM 指令集,PC 上所用到的指令集是 X86 指令集。要在 PC 机
上编译出最后能够在 ARM 上运行的应用程序,所用到的编译器叫做交又编译器。即编译
器运行于一种体系结构上,生成能够在另一种体系结构上执行的代码。
交叉编译器可以通过下载相应的制作工具以及适用于 Linux PC 平台的 gcc 工具包自
3
己制作,也可以下载别人已经编译好的工具包。总之在安装 Qt Embedded for ARM 之前,
要将交叉编译器安装好(交叉编译器的版本不能太低,否则在编译 Q 的时候会出错,这里
所用的是 arm- -linux-gc4.4.3.tar.gz)。交叉编译器是已经编译好的二进制包,只需要解压到
某个路径,再将这个路径加人到环境变量中,环境变量的添加与在 Qt 安装时添加环境变
量方法相同。
QT Embedded for ARM 的安装
底层编译器安装好以后,要安装相应的 QT for Embedded Linux;通过相应的配置选项编
译成 ARM 版。对于 for ARM 的 Qt 安装,首先要在 NOKIA 的官方网站上下载相应的 Linux
安装包(安装包从 NOKIA 的 ftp 服务器下载):
qt-embedded-linux-opensource-src-4.5.3.tar.gz
源代码包下载好了之后,首先将下载的源代码包解压缩。要生成可以编译成在 ARM 体系
结构上运行的 Qt 程序,可以通过两种方法,一种是通过运行配置好的脚本文件;另外一
种通过配置选项配置符合的 Qt。这里使用第二种方法,编译一个运行在 PC 机上的 Qt,
这个 Qt 编译出来的程序可以运行在 ARM 上。
安装步骤如下:
(1)解压缩之后,运行./ configure 生成 Makefile 文件。
生成 Makefile 文件时要加相应的参数。
-embedded arm,指定 Qt 的硬件架构为 ARM。
-prefix 参数,指定要安装的路径。(如果不指定会有默认的安装路径,同 linux 平台的 Qt
安装
4
例:-prefix /usr/local/Qt
如果在配置的过程中出错,可以在配置时使用-v 选项来查看出错原因。
(2)配置成功后,输人“make'”即可编译
(3)编译完成后,直接输入“ make install 将 Qt 安装到指定的目录中
在安装完成以后,以后要用到 for ARM 的 Q 编译器,编译 Qt 工程文件的时候,要用到的
qmake 工具是 for ARM 的,直接输人全路径编译例如:
编译 for PC 的 Qt 过程是:
(1) qmake- project( qmake 命令,用于创建 hell.pro,将所有的文件痛译成一个与平台无关
的工程文件)。
(2) qmake( qmake 命令,读取本身的 Qt 设置,生成与库一致的相 立的 Make-file)。
(3)make(根据生成的 Makefile,将文件编译为二进制可执行程序)。
编译 for arm 的 Qt 过程为:
/usr/local/Qt/bin/qmake - project
/usr/local/Qt/bin/qmake
Make
5
3.14、信号与槽机制的优点
(1) 类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接收该
信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是可以少千信号的参数个数的,但缺
少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。
(2) 松散耦合。信号和槽机制减弱了 Qt 对象的耦合度。激发信号的 Qt 对象无须知道是哪个对象的
哪个槽需要接收它发出的信号,它只需做的是在适当的时间发送适当的信号就可以了,而不需要知道
也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽接收到了信号。同样地,对象
的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt 就保证了适合的槽得到了调用。即使
关联的对象在运行时被删除,应用程序也不会崩溃。
一个类若要支持信号和槽,就必须从 QObject 或 QObject 的子类继承。注意,Qt 信号和槽机制不
支待对模板的使用。
3. 信号与槽机制的效率
信号和槽机制增强了对象间通信的灵活性,然而这也损失了一些性能。同回调函数相比,信号和
槽机制运行速度有些慢。通常,通过传递一个信号来调用槽函数将会比直接调用非虚函数运行速度慢
10 倍。原因主要如下。
(1) 需要定位接收信号的对象。
(2) 安全地遍历所有的关联(如一个信号关联多个槽的情况)。
(3) 编组(marshal)/解组(unmarshal)传递的参数。
(4) 多线程的时候,信号可能需要排队等待。
然而,与创建堆对象的 new 操作及删除堆对象的 delete 操作相比,信号和槽的运行代价只是它们
很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的;同信号和槽提供
的灵活性和简便性相比,这点性能的损失也是值得的。
6