版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沈阳航空航天大学课课 程程 设设 计计 报报 告告课程设计名称:嵌入式系统综合课程设计嵌入式系统综合课程设计课程设计题目:基于嵌入式基于嵌入式 linux 计算器的实现计算器的实现院(系): 专 业: 班 级:学 号:姓 名: 指导教师: 完成日期: 沈阳航空航天大学课程设计报告 -I-目目 录录第第 1 章章 系统分析系统分析.11.1 需求分析.11.2 硬件分析.11.2.1 实验环境.11.3 软件分析.21.3.1 操作系统简介.21.3.2 开发技术简介.2第第 2 章章 系统设计系统设计.42.1 操作系统移植.42.2 系统模块设计.42.3 函数设计.42.4 关键流程.52
2、.4.1 系统主流程.52.4.2 功能按键流程图.5第第 3 章章 QT 程序移植程序移植 .73.1 建立交叉编译环境.73.2 QT源文件的编译.83.3 QT应用的移植.8第第 4 章章 系统调试及运行系统调试及运行.94.1 调试分析.94.2 结果分析.10参考文献参考文献.11附附 录录.12沈阳航空航天大学课程设计报告 第 1 章 系统分析-1-第 1 章 系统分析1.1 需求分析需求分析课程设计内容和要求: 设计一个简单的计算器,能够进行加、减、乘、除等数学操作。(1) 利用嵌入式 linux 和 Qt,在 ARM9 上实现。(2) 界面尽可能友好、美观。这是一个简单的计算器
3、软件,功能为加、减、乘、除等,在嵌入式设备上实现,使用方便,性能可靠,基于 ARM 内核的微处理器在市场上绝对处于领导地位,因此该类项目拥有庞大的市场。1.2 硬件分析硬件分析将编写好的程序 Makefile 后,通过 Vivi 烧入到博创 UP-Star2410 开发板上,开机运行即可。1.2.1 实验环境实验环境实验环境是:win7 下安装虚拟机,在虚拟机上安装 linux(ubuntu11.10)开发板是:博创 UP-Star6410,开发板。软件资源:(1)内核版本 linux 2.6.21(2)BootLoader:U-boot(3)文件系统:Cramfs+Yaffs2硬件资源:(1
4、) 基于 ARM1176JZF-S 内核的 SAMSUNG S3C6410 处理器 (2) 系统工作频率为 533/667MHz(3)256MB Nand Flash、8MB NorFlash (4)256MB Mobile DDR RAM沈阳航空航天大学课程设计报告 第 1 章 系统分析-2-(5)可外接 3.5 寸液晶屏或 7 寸液晶屏、可外接触摸屏(6)1 个主 USB 口、一个 USB OTG 口 (7)100M 以太网口、一个 USB 串口接口(8)JTAG 接口(9)总线和可复用资源扩展接口、多媒体支持 AUDIO CODEC(10)JOYSTICK 按键,1 个中断键,5 个 L
5、ED 灯1.3 软件分析软件分析这次课设我们用的是 Linux 下的 Ubuntu 系统。Linux 是一样自由和开放源代码的类 Unix 操作系统。该操作系统的内核由林纳斯托瓦兹在 1991 年1 月 5 日首次发布。严格来说,术语 Linux 只表示操作系统内核本身,但通常采用 Linux 内核来表达该意思。Linux 则常用来指基于 Linux 内核的完整操作系统。包括 GUI 组件和许多其他的工具。Qt 是一个跨平台的 C+应用程序开发框架。广泛采用于开发 GUI 程序,这种情况下又称为部件工具箱。也可用于开发非 GUI 程序,比如控制台工具和服务器。1.3.1 操作系统简介操作系统简
6、介Ubuntu 是一个以桌面应用为主的 GUN/Linux 操作系统,其名来自非洲南部祖鲁语或科萨语,意思是人性。Ubuntu 是基于 Debian 发布版和 GNOME 桌面环境,与 Debian 的不同在于它每 6 个月会发布一个新版本,每 2 年发布一个 LTS 长期支持版本。 普通的桌面版可以获得发布后 18 个月内的支持,标为 LTS(长期支持)的桌面版可以获得更长时间的支持。Ubuntu 的目标在于为一般用户提供一个最新的同时又相当稳定的主要由自由软件构建而成的操作系统。1.3.2 开发技术简介开发技术简介Qt 是一个 1991 年由奇趣科技开发的跨平台 C+图形用户界面应用程序沈
7、阳航空航天大学课程设计报告 第 1 章 系统分析-3-开发框架。它既可以开发 GUI 程式,也可用于开发非 GUI 程式,比如控制台工具和服务器,具有下列一些优点: 1)优良的跨平台特性。 2)面向对象。 3)支持 2D/3D 图形渲染,支持 OpenGL。 4)大量的开发文档。 5)XML 支持。Qt 是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008 年,奇趣科技被诺基亚公司收购,QT 也因此成为诺基亚旗下的编程语言工具。2012 年,Qt 被 Digia 收购。基本上 Qt 同 X
8、-Window 上的 Motif、Openwin、GTK 等图形界面库和Windows 平台上的 MFC、OWL、VCL、ATL 是同类型的。 沈阳航空航天大学课程设计报告 第 2 章 系统设计-4-第 2 章 系统设计2.1 操作系统移植操作系统移植在电脑上安装 Vmware Workstation 虚拟机,下载 Ubuntu11.04 的安装镜像,通过镜像文件将 Ubuntu11.04 安装在 Vmware Workstation 工作平台下。进行安装就可以运行 Ubuntu 系统了。2.2 系统模块设计系统模块设计该软件主要分为四个大的功能模块:(1)图形整合模块:将写成的文本框、按键整
9、齐排列。(2)数字输入模块:将输入的数字显示在文本框上。(3)功能按键模块:将文本框上已经输出的数字进行处理,包括数字运算、 屏幕清零等操作。(4)临时存储模块:将文本框上的数字存入一个寄存器,可进行调用或者清 零。 2.3 函数设计函数设计该程序的设计主要函数有以下三个:1)数字按键函数:构造按键类,对按键的点击可将数字传入文本框,供用户进行操作。2)功能按键函数:构造按键类,可以使不同的按钮拥有不同的功能,通过信号槽对所有对象进行处理,包括数字存储和操作,给予点击信号量,使其调用该函数。3)按键整合函数:将文本框、数字按键、功能按键整齐排列、分区。沈阳航空航天大学课程设计报告 第 2 章
10、系统设计-5-2.4 关键流程关键流程这个软件里有几个模块比较关键,分别是对文本框的写入和读出、调用数据完成操作,通过槽函数的连接将按钮和文本框连接,调用各模块的函数对文本框内容进行操作,文本框可存储显示 int 型和 double 型的数据。2.4.1 系统主流程系统主流程进入软件后,软件将显示经函数整理的计算器界面,点击数字按键,将会在文本框上显示相应数字,点击功能按键,会对数字进行运算或存储。系统主流程图如图 2.1 所示。开始操作数据显示在文本框输入完成否是将数据显示在文本框上输入数据结束图图 2.12.1 系统主流程图系统主流程图2.4.2 功能按键流程图功能按键流程图单击任意功能按
11、键均能对文本框内的数据进行操作,模式相同,但键位过多,所以以概括形式的流程图展示其工作过程。功能按键流程图如图 2.2、图 2.3 所示。沈阳航空航天大学课程设计报告 第 2 章 系统设计-6-开始从文本框中读取数据对数据进行操作将操作结果显示在文本框中结束图图 2.2 功能按键流程图功能按键流程图(一一)开始从文本框中读取第一段数据清零文本框将操作结果显示在文本框中结束在文本框中输入第二段内容并读取对两段数据进行操作图图 2.3 功能按键流程图功能按键流程图(二二)沈阳航空航天大学课程设计报告 第 3 章 Qt 程序移植-7-第 3 章 Qt 程序移植3.1 建立交叉编译环境建立交叉编译环境
12、 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。(1)实验环境交叉编译工具:arm-linux- 4.2.2编译平台:ubuntu10.10开发板类型:UP-Star6410(2)搭建步骤1)在/usr/local/下建立交叉编译器的安装目录 arm: sudo mkdir /usr/local/arm2)将下载的交叉编译器包解压到/usr/local/arm 目录下: sudo tar jxvf c
13、ross-4.2.2-eabi.tar.bz2 -C /usr/local/arm/ 3)解压成功后,修改 PATH 环境变量: sudo vim /etc/profile 在文件为加入交叉编译器 arm-linux-所在的路径: export PATH=$PATH:/usr/local/arm/4.2.2-eabi/usr/bin 然后退出 vim。4)更新一下配置文件/etc/profile:source /etc/profile5)检测是否安装成功 现在就可以使用交叉编译器了,写一个测试程序 helloworld,交叉编译下,看是否能在开发板上运行。 沈阳航空航天大学课程设计报告 第 3
14、 章 Qt 程序移植-8- i. 交叉编译测试程序 arm-linux-gcc helloworld.c -o helloworld ii.把生成的可执行文件 helloworld 复制到 NFS 的挂载目录下: sudo cp ./helloworld /nfsboot 注意:本实验中开发板使用 NFS 挂载 rootfs,nfsboot 是 NFS 的挂载目录。 iii.在超级终端上运行:./helloworld,执行结果如图 3.1。 图图 3.13.1 编译环境测试结果编译环境测试结果3.2 Qt 源文件的编译源文件的编译进入源文件所在目录,输入 qmake 命令,再输入 make 调
15、用已经生成的Makefile 文件,即可生成可以在开发板上执行的可执行二进制文件。3.3 Qt 应用的移植应用的移植1)安装 UP-Star6410 的 USB 驱动,将开发板的串口与电脑串口相连,打开超级终端,创建连接名称为 UP-Star6410,选择 COM1,波特率设置为115200,数据控制流为无,点击确定。2)将开发板调为 Nor Flash,打开电源,打开 DNW 软件。3)格式化 Nand Flash,然后对开发板进行 Uboot、内核、开机画面和文件系统的烧写。4)进行 Qt 库的移植,用网络线将 PC 与开发板相连,在 Ubuntu 下搭建 nfs服务,输入将 Ubuntu
16、 的 ip 设置成与开发板一个网段,再将开发板挂载到Ubuntu 上,把 Qt 文件下的 lib 下的所有文件拷贝到开发板上,并配置环境变量。5)关闭电源,将开发板调为 Nand Flash,打开电源后进入开发板的 Linux 系统,在命令行输入 rz,右键点击超级终端,选择需要发送的 Qt 应用程序,点击发送。6)在命令行输入./程序名称,即可打开该 Qt 程序。沈阳航空航天大学课程设计报告 第 4 章 系统调试及运行-9-第 4 章 系统调试及运行4.1 调试分析调试分析直接运行软件,显示计算器界面,如图 4.1 所示。 图图 4.1 计算器界面计算器界面点击数字按键区会在文本框中显示数据
17、,蓝色框图内为数字键区域,如图 4.2 所示。 图图 4.2 数字按键显示数字按键显示沈阳航空航天大学课程设计报告 第 4 章 系统调试及运行-10- 点击功能按钮会对文本框中数据进行操作,以开方运算为例,红色框图内为功能按键区,如图 4.3 所示。 图图 4.3 功能按键显示功能按键显示4.2 结果分析结果分析1)打开软件后,能正确的对文本框中输入 int 型数据和 double 型数据。2)点击运算功能按键时,会对文本框中的数据进行正确运算,并在下一次点击运算按键时,将运算结果显示在文本框上。3)点击存储功能按键时,会将当前文本框中的数据存入一个寄存器中,在点击其他存储按键时对该数据操作。
18、4)总体来看,实现了功能需求中要求的功能,界面友好。沈阳航空航天大学课程设计报告 参考文献-11-参考文献1 刘峥嵘等. 嵌入式 Linux 应用开发详解M. 北京:机械工业出版社,20042 蔡志明等. 精通 Qt4 编程(第 2 版)M. 北京:电子工业出版社,20113 霍亚飞. Qt 及 Qt Quick 开发实战精解 M. 北京:北京航空航天大学出版社,20124 霍亚飞. Qt Creater 快速入门M. 北京:北京航空航天大学出版社,20125 陈祥琳. Linux 从入门到精通M. 北京:人民邮电出版社,20126 博创公司. UP-Star6410 实验指导 v4.0M.
19、北京博创兴盛科技有限公司7 丁林松等. Qt4 图形设计与嵌入式开发M. 北京:人民邮电出版社,2009沈阳航空航天大学课程设计报告 附 录-12-附 录部分主要源程序代码#include #include #include button.h#include calculator.h/! 0Calculator:Calculator(QWidget *parent) : QDialog(parent) sumInMemory = 0.0; sumSoFar = 0.0; factorSoFar = 0.0; waitingForOperand = true;/! 0/! 1 display =
20、 new QLineEdit(0);/! 1 /! 2 display-setReadOnly(true); display-setAlignment(Qt:AlignRight); display-setMaxLength(15); QFont font = display-font(); font.setPointSize(font.pointSize() + 8); display-setFont(font);/! 2/! 4沈阳航空航天大学课程设计报告 附 录-13- for (int i = 0; i setSizeConstraint(QLayout:SetFixedSize);
21、mainLayout-addWidget(display, 0, 0, 1, 6); mainLayout-addWidget(backspaceButton, 1, 0, 1, 2); mainLayout-addWidget(clearButton, 1, 2, 1, 2); mainLayout-addWidget(clearAllButton, 1, 4, 1, 2); mainLayout-addWidget(clearMemoryButton, 2, 0); mainLayout-addWidget(readMemoryButton, 3, 0); mainLayout-addWi
22、dget(setMemoryButton, 4, 0); mainLayout-addWidget(addToMemoryButton, 5, 0); for (int i = 1; i addWidget(digitButtonsi, row, column); mainLayout-addWidget(digitButtons0, 5, 1); mainLayout-addWidget(pointButton, 5, 2); mainLayout-addWidget(changeSignButton, 5, 3); mainLayout-addWidget(divisionButton,
23、2, 4); mainLayout-addWidget(timesButton, 3, 4); mainLayout-addWidget(minusButton, 4, 4); mainLayout-addWidget(plusButton, 5, 4); mainLayout-addWidget(squareRootButton, 2, 5); mainLayout-addWidget(powerButton, 3, 5); mainLayout-addWidget(reciprocalButton, 4, 5); mainLayout-addWidget(equalButton, 5, 5
24、); setLayout(mainLayout);沈阳航空航天大学课程设计报告 附 录-15- setWindowTitle(tr(Calculator);/! 6/! 7void Calculator:digitClicked() Button *clickedButton = qobject_cast(sender(); int digitValue = clickedButton-text().toInt(); if (display-text() = 0 & digitValue = 0.0) return; if (waitingForOperand) display-cle
25、ar();waitingForOperand = false; display-setText(display-text() + QString:number(digitValue);/! 7/! 8void Calculator:unaryOperatorClicked()/! 8 /! 9 Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toDouble(); double result
26、 = 0.0; if (clickedOperator = tr(Sqrt) if (operand setText(QString:number(result); waitingForOperand = true;/! 9/! 10void Calculator:additiveOperatorClicked()/! 10 /! 11 Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toD
27、ouble();/! 11 /! 12 if (!pendingMultiplicativeOperator.isEmpty() /! 12 /! 13 if (!calculate(operand, pendingMultiplicativeOperator) 沈阳航空航天大学课程设计报告 附 录-17- abortOperation(); return; display-setText(QString:number(factorSoFar); operand = factorSoFar; factorSoFar = 0.0; pendingMultiplicativeOperator.cl
28、ear(); /! 13 /! 14 if (!pendingAdditiveOperator.isEmpty() /! 14 /! 15 if (!calculate(operand, pendingAdditiveOperator) abortOperation(); return; display-setText(QString:number(sumSoFar); else sumSoFar = operand; /! 15 /! 16 pendingAdditiveOperator = clickedOperator;/! 16 /! 17 waitingForOperand = tr
29、ue;/! 17/! 18void Calculator:multiplicativeOperatorClicked()沈阳航空航天大学课程设计报告 附 录-18- Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toDouble(); if (!pendingMultiplicativeOperator.isEmpty() if (!calculate(operand, pendingMu
30、ltiplicativeOperator) abortOperation(); return; display-setText(QString:number(factorSoFar); else factorSoFar = operand; pendingMultiplicativeOperator = clickedOperator; waitingForOperand = true;/! 18/! 20void Calculator:equalClicked() double operand = display-text().toDouble(); if (!pendingMultipli
31、cativeOperator.isEmpty() if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; operand = factorSoFar; factorSoFar = 0.0; pendingMultiplicativeOperator.clear();沈阳航空航天大学课程设计报告 附 录-19- if (!pendingAdditiveOperator.isEmpty() if (!calculate(operand, pendingAdditiveOperator) abo
32、rtOperation(); return; pendingAdditiveOperator.clear(); else sumSoFar = operand; display-setText(QString:number(sumSoFar); sumSoFar = 0.0; waitingForOperand = true;/! 20/! 22void Calculator:pointClicked() if (waitingForOperand) display-setText(0); if (!display-text().contains(.) display-setText(disp
33、lay-text() + tr(.); waitingForOperand = false;/! 22/! 24void Calculator:changeSignClicked()沈阳航空航天大学课程设计报告 附 录-20- QString text = display-text(); double value = text.toDouble(); if (value 0.0) text.prepend(tr(-); else if (value setText(text);/! 24/! 26void Calculator:backspaceClicked() if (waitingFor
34、Operand) return; QString text = display-text(); text.chop(1); if (text.isEmpty() text = 0; waitingForOperand = true; display-setText(text);/! 26/! 28void Calculator:clear() if (waitingForOperand)沈阳航空航天大学课程设计报告 附 录-21- return; display-setText(0); waitingForOperand = true;/! 28/! 30void Calculator:cle
35、arAll() sumSoFar = 0.0; factorSoFar = 0.0; pendingAdditiveOperator.clear(); pendingMultiplicativeOperator.clear(); display-setText(0); waitingForOperand = true;/! 30/! 32void Calculator:clearMemory() sumInMemory = 0.0;void Calculator:readMemory() display-setText(QString:number(sumInMemory); waitingForOperand = true;沈阳航空航天大学课程设计报告 附 录-22-void Calculator:setMemory() equalClicked(); sumInMemory = display-text().
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度卫星导航系统服务合同
- 2024天然气运输物流信息化建设合同
- 2024常见签订劳动合同陷阱
- 2024年工程项目验收与交付合同
- 2024年建筑工程混凝土专项分包协议
- 2024年度吨不锈钢带打印功能电子地磅秤技术支持合同
- 2024年大数据服务合作协议
- 2024年度环保项目工程设计与施工合同
- 2024年度电子商务平台技术支持与运营服务合同
- 2024年度水果购销合同
- 天文竞赛复习题库及答案
- 污泥( 废水)运输服务方案(技术方案)
- 公司章程范本杭州工商docx
- 职业院校面试题目及答案
- 全护筒跟进旋挖施工方案
- 海水淡化处理方案
- 初中数学基于大单元的作业设计
- 小学一年级下册数学期末考试质量分析及试卷分析
- 原材料情况说明范本
- 相邻企业间安全管理协议
- 装饰装修工程售后服务具体措施
评论
0/150
提交评论