《嵌入式系统》课程设计说明书电子时钟系统院部:学生姓名:指导教师:职称专业:班级:学号:湖南工学院嵌入式系统课程设计课题任务书2.显示的时间为开发板当前的系统时间,显示的结果随着系统时间变化而变I摘要嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统( 包括硬、软件系统) 极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等Browser 。
嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。
与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
嵌入式技术已成为信息产业中发展最快、应用最广的计算机技术之一,并被广泛应用于网络通信、消费电子、医疗电子、工业控制和交通系统等领域。
本次设计采用QT程序开发框架开发的模拟时钟程序,使用Linux系统到嵌入式终端移植和交叉编译环境搭建,最终成功实现了在嵌入式终端的运行。
关键词:嵌入式系统;QT;模拟时钟;Linux系统目录1绪论 (1)1.1 设计背景 (2)1.2 设计目的和意义 (2)2 嵌入式Linux系统 (2)2.1 嵌入式Linux概念 (2)2.2 嵌入式Linux组成 (2)3 Qt工具 (3)3.1 Qt简介 (3)3.2 Qt优点 (3)4 模拟时钟的设计 (4)4.1 代码的编写 (4)4.2 代码的调试与运行 (4)5 模拟时钟到开发板的下载 (6)5.1 交叉编译环境的构建 (7)5.2 模拟时钟到开发板的下载运行 (7)结论 (10)参考文献 (11)致谢 (12)附录 (13)1绪论嵌入式Linux操作系统在广泛和深入的应用于各个领域,应用的技术也越来越复杂。
而随着城市信息化和行业信息化的持续深入,嵌入式技术已成为信息产业中发展最快、应用最广的计算机技术之一,并被广泛应用于网络通信、消费电子、医疗电子、工业控制和交通系统等领域。
嵌入式Linux开始采用较为复杂的图形用户界面。
QT以其强大的功能,良好的可移植性成为一种被广泛使用的GUI 系统。
于是嵌入式操作系统及其相应图形用户界面的不断发展,嵌入式软件的开发显得越来越重要。
本次设计模拟时钟能够以简洁的外观为用户提供时间信息成为了系统中的重要组成部分,在基于QT的嵌入式系统中模拟时钟具有深刻的实用价值。
1.1 设计背景源代码开放的Linux搭建的嵌入式操作系统由于其强大的网络功能和低成本,近年来得到了越来越多的应用。
其能够提供全功能的桌面计算,定制非常方便并且支持大多数嵌入式系统上使用的芯片。
在嵌入式Linux操作系统上使用一个功能完备的轻量级、高性能、高可靠、可配置的GUI系统成为可行的解决方案。
全过程自动化产品制造、大范围电子商务活动、高度协同科学实验以及现在化家庭起居,为嵌入式产品造就了崭新而巨大的商机。
日趋增长的功能密度、灵活的网络链接、轻便的移动应用和多媒体的信息处理对嵌入式系统软件技术提出了新的挑战。
1.2 设计目的和意义随着近年来计算机技术的迅速发展,当新硬件、新技术出现时,计算机的体系结构、指令系统和操作系统都可能发生相应的改变,这势必会导致一部风应用在新环境下无法正常运行。
如果舍弃原有软件重新开发,将会耗费大量的人力和财力,而浪费了许多成熟的软件成果。
而QT在源代码级上实现了跨平台特性,极大地支持了跨平台通用软件的开发。
QT可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,充分实现了程序的跨平台运行。
这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
模拟时钟需要编写代码来实现它的功能,然后对代码进行编译运行,检查是否达到了预期的效果。
2 嵌入式Linux系统2.1 嵌入式Linux简介嵌入式Linux是将标准Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。
它以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作系统领域内也获得了飞速发展。
嵌入式系统的发展方向是与目标密切相关的嵌入性能、操控能力与控制的可靠性。
嵌入式操作系统从它的产生到现在经历了几个阶段,全入市系统是以应用为中心的计算机技术为基础并且软硬件是可裁剪的适用于对功能、可靠性、成本、功耗等有严格要求的专用计算机系统嵌入式系统最典型的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各种运用了嵌入式技术的电子产品。
各种新型嵌入式设备在数量上已经远远超过了通用计算机。
2.2 嵌入式Linux的组成一个最小的嵌入式系统基本组成为:一个用作引导的可用设施(工具);一个具备内存管理,进程管理和定时器服务的Linux微内核;一个初始进程;硬件的驱动程序;一个或几个应用进程以提供必要的应用功效。
嵌入式Linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性。
(1)硬件层:硬件层包含嵌入式微处理器、存储器(SDRAM、ROM、Flash 等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。
在意嵌入式处理器基础上添加电源电路、时钟电路和存储电路就构成了一个嵌入式核心控制模块。
其中操作系统和应用程序多都可以固化在ROM中。
(2)中间层:硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或者板级支持包(Board Support Package,BSP),它半系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP层提供的接口即可进行开发。
该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。
(3)系统软件层:系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。
RTOS是嵌入式应用软件的基础和开发平台。
3 Qt工具3.1 Qt简介Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。
它给应用程序开发者提供了一套功能齐全的进行艺术级的图形用户界面程序设计所需的功能。
Qt很容易扩展,并且允许真正地组件编程。
基本上Qt和X Window上的GTK,Openwin,Motif等图形界面库和Windows 平台上的ATL,CL,OWL,VMFC是非常类似的。
QtCreator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。
Qt Creator 包括项目生成向导、高级的C++ 代码编辑器、浏览文件及类的工具、集成了Qt Designer、Qt Assistant、Qt Linguist、图形化的GDB 调试前端,集成qmake 构建工具等。
3.2 Qt优点Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signal/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
Qt有丰富的API包括多达250个以上的C++类,还是提供基于模板的collections,serialization,file,I/Odevice,directory management,date/time类,还包括正则表达式的处理功能。
支持2D/3D图形渲染、OpenGL、大量的文档开发、XML支持和实现本地界面与Web内容的无缝集成。
4 模拟时钟的设计设计要求指针式的表盘为原型,并且圆周上有分布均匀的12个刻度,钟面上有长度不同的指针,即时针、分针、秒针,间隔一秒更新一次时间。
显示的时间为开发板当前的系统时间,显示的结果随着系统时间变化而变化。
4.1 代码的编写模拟时钟每一个模块的功能是在cpp文件中实现的,h文件是类、槽、函数、变量的定义,main主函数用来调用现实,头文件和主函数的代码如下:myclock.h文件#ifndef MYCLOCK_H#define MYCLOCK_H#include <QWidget>#include <QPainter>#include <QPaintEvent>#include <QTime>#include <QTimer>#include <qmath.h>namespace Ui {class myclock;}class myclock : public QWidget{Q_OBJECTpublic:explicit myclock(QWidget *parent = 0);~myclock();protected:void paintEvent(QPaintEvent*);private:Ui::myclock *ui;QTimer *timer;int i;};#endif // MYCLOCK_Hmain主函数:main.cpp#include "myclock.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);myclock w;w.show();return a.exec();}模拟时钟的走时为调用系统时间,用定时器每一秒更新一次draw函数,在表盘上显示为秒针跳动一格,由于始终与系统时间保持一致,所以完全可以作为直接的时间显示工具。
实现的代码如下:myclock::myclock(QWidget *parent) :QWidget(parent),ui(new Ui::myclock){ui->setupUi(this);this->resize(350,350);timer = new QTimer(this);//定时器connect(timer,SIGNAL(timeout()),this,SLOT(update()));timer->start(1000);}myclock::~myclock(){delete ui;}时钟的指针绘制也是根据定义的坐标用画笔画出需要的指针形状,其中绘制指针的实现代码如下:QPen hourpen;//时针的画笔hourpen.setWidth(4);//设置画笔宽度//hourpen.setColor(Qt::blue);//设置画笔颜色mypainter.setPen(hourpen);mypainter.save();//mypainter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));mypainter.drawConvexPolygon(hourHand, 3);//mypainter.drawLine(0,0,0,-80);mypainter.restore();QPen minutepen;//分针的画笔minutepen.setWidth(3);minutepen.setColor(Qt::yellow);//设置画笔颜色mypainter.setPen(minutepen);mypainter.save();mypainter.rotate(6.0 * (time.minute() + time.second() / 60.0));mypainter.drawConvexPolygon(minuteHand, 3);//mypainter.drawLine(0,0,0,-100);mypainter.restore();QPen secondpen;//秒针的画笔secondpen.setWidth(1);secondpen.setColor(Qt::blue);//设置画笔颜色4.2 代码的调试和运行通过以上步骤代码编写已经完成,在Windows系统下的QT运行。