




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳航空航天大学 课课 程程 设设 计计 报报 告告 课程设计名称:嵌入式系统综合课程设计嵌入式系统综合课程设计 课程设计题目:基于嵌入式基于嵌入式 linux 计算器的实现计算器的实现 院(系): 专 业: 班 级: 学 号: 姓 名: 指导教师: 完成日期: 沈阳航空航天大学课程设计报告 -I- 目目 录录 第第 1 章章 系统分析系统分析.1 1.1 需求分析.1 1.2 硬件分析.1 1.2.1 实验环境.1 1.3 软件分析.2 1.3.1 操作系统简介.2 1.3.2 开发技术简介.2 第第 2 章章 系统设计系统设计.4 2.1 操作系统移植.4 2.2 系统模块设计.4 2.3 函数设计.4 2.4 关键流程.5 2.4.1 系统主流程.5 2.4.2 功能按键流程图.5 第第 3 章章 QT 程序移植程序移植 .7 3.1 建立交叉编译环境.7 3.2 QT源文件的编译.8 3.3 QT应用的移植.8 第第 4 章章 系统调试及运行系统调试及运行.9 4.1 调试分析.9 4.2 结果分析.10 参考文献参考文献.11 附附 录录.12 沈阳航空航天大学课程设计报告 0s 第 1 章 系统分析 -1- 第 1 章 系统分析 1.1 需求分析需求分析 课程设计内容和要求: 设计一个简单的计算器,能够进行加、减、乘、除等数学操作。 (1) 利用嵌入式 linux 和 Qt,在 ARM9 上实现。 (2) 界面尽可能友好、美观。 这是一个简单的计算器软件,功能为加、减、乘、除等,在嵌入式设备上实 现,使用方便,性能可靠,基于 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) 基于 ARM1176JZF-S 内核的 SAMSUNG S3C6410 处理器 (2) 系统工作频率为 533/667MHz (3)256MB Nand Flash、8MB NorFlash (4)256MB Mobile DDR RAM 沈阳航空航天大学课程设计报告 0s 第 1 章 系统分析 -2- (5)可外接 3.5 寸液晶屏或 7 寸液晶屏、可外接触摸屏 (6)1 个主 USB 口、一个 USB OTG 口 (7)100M 以太网口、一个 USB 串口接口 (8)JTAG 接口 (9)总线和可复用资源扩展接口、多媒体支持 AUDIO CODEC (10)JOYSTICK 按键,1 个中断键,5 个 LED 灯 1.3 软件分析软件分析 这次课设我们用的是 Linux 下的 Ubuntu 系统。Linux 是一样自由和开放 源代码的类 Unix 操作系统。该操作系统的内核由林纳斯托瓦兹在 1991 年 1 月 5 日首次发布。严格来说,术语 Linux 只表示操作系统内核本身,但通常 采用 Linux 内核来表达该意思。Linux 则常用来指基于 Linux 内核的完整操作 系统。包括 GUI 组件和许多其他的工具。 Qt 是一个跨平台的 C+应用程序开发框架。广泛采用于开发 GUI 程序, 这种情况下又称为部件工具箱。也可用于开发非 GUI 程序,比如控制台工具 和服务器。 1.3.1 操作系统简介操作系统简介 Ubuntu 是一个以桌面应用为主的 GUN/Linux 操作系统,其名来自非洲南 部祖鲁语或科萨语,意思是人性。 Ubuntu 是基于 Debian 发布版和 GNOME 桌面环境,与 Debian 的不同在 于它每 6 个月会发布一个新版本,每 2 年发布一个 LTS 长期支持版本。 普通 的桌面版可以获得发布后 18 个月内的支持,标为 LTS(长期支持)的桌面版 可以获得更长时间的支持。 Ubuntu 的目标在于为一般用户提供一个最新的同时又相当稳定的主要由 自由软件构建而成的操作系统。 1.3.2 开发技术简介开发技术简介 Qt 是一个 1991 年由奇趣科技开发的跨平台 C+图形用户界面应用程序 沈阳航空航天大学课程设计报告 0s 第 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-Window 上的 Motif、Openwin、GTK 等图形界面库和 Windows 平台上的 MFC、OWL、VCL、ATL 是同类型的。 沈阳航空航天大学课程设计报告 0s 第 2 章 系统设计 -4- 第 2 章 系统设计 2.1 操作系统移植操作系统移植 在电脑上安装 Vmware Workstation 虚拟机,下载 Ubuntu11.04 的安装镜像, 通过镜像文件将 Ubuntu11.04 安装在 Vmware Workstation 工作平台下。进行安装 就可以运行 Ubuntu 系统了。 2.2 系统模块设计系统模块设计 该软件主要分为四个大的功能模块: (1)图形整合模块:将写成的文本框、按键整齐排列。 (2)数字输入模块:将输入的数字显示在文本框上。 (3)功能按键模块:将文本框上已经输出的数字进行处理,包括数字运算、 屏幕清零等操作。 (4)临时存储模块:将文本框上的数字存入一个寄存器,可进行调用或者 清 零。 2.3 函数设计函数设计 该程序的设计主要函数有以下三个: 1)数字按键函数:构造按键类,对按键的点击可将数字传入文本框,供用 户进行操作。 2)功能按键函数:构造按键类,可以使不同的按钮拥有不同的功能,通过 信号槽对所有对象进行处理,包括数字存储和操作,给予点击信号量, 使其调用该函数。 3)按键整合函数:将文本框、数字按键、功能按键整齐排列、分区。 沈阳航空航天大学课程设计报告 0s 第 2 章 系统设计 -5- 2.4 关键流程关键流程 这个软件里有几个模块比较关键,分别是对文本框的写入和读出、调用数据 完成操作,通过槽函数的连接将按钮和文本框连接,调用各模块的函数对文本框 内容进行操作,文本框可存储显示 int 型和 double 型的数据。 2.4.1 系统主流程系统主流程 进入软件后,软件将显示经函数整理的计算器界面,点击数字按键,将会在 文本框上显示相应数字,点击功能按键,会对数字进行运算或存储。系统主流程 图如图 2.1 所示。 开始 操作数据 显示在文本框 输入完成 否 是 将数据显示在 文本框上 输入数据 结束 图图 2.12.1 系统主流程图系统主流程图 2.4.2 功能按键流程图功能按键流程图 单击任意功能按键均能对文本框内的数据进行操作,模式相同,但键位过多, 所以以概括形式的流程图展示其工作过程。功能按键流程图如图 2.2、图 2.3 所示。 沈阳航空航天大学课程设计报告 0s 第 2 章 系统设计 -6- 开始 从文本框中 读取数据 对数据进行操作 将操作结果显 示在文本框中 结束 图图 2.2 功能按键流程图功能按键流程图(一一) 开始 从文本框中读 取第一段数据 清零文本框 将操作结果显 示在文本框中 结束 在文本框中输 入第二段内容 并读取 对两段数据进 行操作 图图 2.3 功能按键流程图功能按键流程图(二二) 沈阳航空航天大学课程设计报告 第 3 章 Qt 程序移植 -7- 第 3 章 Qt 程序移植 3.1 建立交叉编译环境建立交叉编译环境 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代 码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说, 就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器 (cross compiler)。 (1)实验环境 交叉编译工具:arm-linux- 4.2.2 编译平台:ubuntu10.10 开发板类型:UP-Star6410 (2)搭建步骤 1)在/usr/local/下建立交叉编译器的安装目录 arm: sudo mkdir /usr/local/arm 2)将下载的交叉编译器包解压到/usr/local/arm 目录下: sudo tar jxvf cross-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/profile 5)检测是否安装成功 现在就可以使用交叉编译器了,写一个测试程序 helloworld,交叉编译下, 看是否能在开发板上运行。 沈阳航空航天大学课程设计报告 第 3 章 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 调用已经生成的 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 的 ip 设置成与开发板一个网段,再将开发板挂载到 Ubuntu 上,把 Qt 文件下的 lib 下的所有文件拷贝到开发板上,并配置环 境变量。 5)关闭电源,将开发板调为 Nand Flash,打开电源后进入开发板的 Linux 系 统,在命令行输入 rz,右键点击超级终端,选择需要发送的 Qt 应用程序, 点击发送。 6)在命令行输入./程序名称,即可打开该 Qt 程序。 沈阳航空航天大学课程设计报告 第 4 章 系统调试及运行 -9- 第 4 章 系统调试及运行 4.1 调试分析调试分析 直接运行软件,显示计算器界面,如图 4.1 所示。 图图 4.1 计算器界面计算器界面 点击数字按键区会在文本框中显示数据,蓝色框图内为数字键区域,如 图 4.2 所示。 图图 4.2 数字按键显示数字按键显示 沈阳航空航天大学课程设计报告 第 4 章 系统调试及运行 -10- 点击功能按钮会对文本框中数据进行操作,以开方运算为例,红色框图内为 功能按键区,如图 4.3 所示。 图图 4.3 功能按键显示功能按键显示 4.2 结果分析结果分析 1)打开软件后,能正确的对文本框中输入 int 型数据和 double 型数据。 2)点击运算功能按键时,会对文本框中的数据进行正确运算,并在下一次点击 运算按键时,将运算结果显示在文本框上。 3)点击存储功能按键时,会将当前文本框中的数据存入一个寄存器中,在点击 其他存储按键时对该数据操作。 4)总体来看,实现了功能需求中要求的功能,界面友好。 沈阳航空航天大学课程设计报告 参考文献 -11- 参考文献 1 刘峥嵘等. 嵌入式 Linux 应用开发详解M. 北京:机械工业出版社,2004 2 蔡志明等. 精通 Qt4 编程(第 2 版)M. 北京:电子工业出版社,2011 3 霍亚飞. Qt 及 Qt Quick 开发实战精解 M. 北京:北京航空航天大学出版社, 2012 4 霍亚飞. Qt Creater 快速入门M. 北京:北京航空航天大学出版社,2012 5 陈祥琳. Linux 从入门到精通M. 北京:人民邮电出版社,2012 6 博创公司. UP-Star6410 实验指导 v4.0M. 北京博创兴盛科技有限公司 7 丁林松等. Qt4 图形设计与嵌入式开发M. 北京:人民邮电出版社,2009 沈阳航空航天大学课程设计报告 附 录 -12- 附 录 部分主要源程序代码 #include #include #include button.h #include calculator.h /! 0 Calculator:Calculator(QWidget *parent) : QDialog(parent) sumInMemory = 0.0; sumSoFar = 0.0; factorSoFar = 0.0; waitingForOperand = true; /! 0 /! 1 display = 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); 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-addWidget(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, 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); setLayout(mainLayout); 沈阳航空航天大学课程设计报告 附 录 -15- setWindowTitle(tr(Calculator); /! 6 /! 7 void Calculator:digitClicked() Button *clickedButton = qobject_cast(sender(); int digitValue = clickedButton-text().toInt(); if (display-text() = 0 if (waitingForOperand) display-clear(); waitingForOperand = false; display-setText(display-text() + QString:number(digitValue); /! 7 /! 8 void Calculator:unaryOperatorClicked() /! 8 /! 9 Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toDouble(); double result = 0.0; if (clickedOperator = tr(Sqrt) if (operand setText(QString:number(result); waitingForOperand = true; /! 9 /! 10 void Calculator:additiveOperatorClicked() /! 10 /! 11 Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toDouble(); /! 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.clear(); /! 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 = true; /! 17 /! 18 void Calculator:multiplicativeOperatorClicked() 沈阳航空航天大学课程设计报告 附 录 -18- Button *clickedButton = qobject_cast(sender(); QString clickedOperator = clickedButton-text(); double operand = display-text().toDouble(); if (!pendingMultiplicativeOperator.isEmpty() if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; display-setText(QString:number(factorSoFar); else factorSoFar = operand; pendingMultiplicativeOperator = clickedOperator; waitingForOperand = true; /! 18 /! 20 void Calculator:equalClicked() double operand = display-text().toDouble(); if (!pendingMultiplicativeOperator.isEmpty() if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; operand = factorSoFar; factorSoFar = 0.0; pendingMultiplicativeOperator.clear(); 沈阳航空航天大学课程设计报告 附 录 -19- if (!pendingAdditiveOperator.isEmpty() if (!calculate(operand, pendingAdditiveOperator) abortOperation(); return; pendingAdditiveOperator.clear(); else sumSoFar = operand; display-setText(QString:number(sumSoFar); sumSoFar = 0.0; waitingForOperand = true; /! 20 /! 22 void Calculator:pointClicked() if (waitingForOperand) display-setText(0); if (!display-text().contains(.) display-setText(display-text() + tr(.); waitingForOperand = false; /! 22 /! 24 void Calculator:changeSignClicked() 沈阳航空航天大学课程设计报告 附 录 -20- QString text = display-text(); double value = text.toDouble(); if (value 0.0) text.prepend(tr(-); else if (value setText(text); /! 24 /! 26 void Calculator:backspaceClicked() if (waitingForOperand) return; QString text = display-text(); text.chop(1); if (text.isEmpty() text = 0; waitingForOperand = true; display-setText(text); /! 26 /! 28 void Calculator:clear() if (waitingForOperand) 沈阳航空航天大学课程设计报告 附 录 -21- return; display-setText(0); waitingForOperand = true; /! 28 /! 30 void Calculator:clearAll() sumSoFar = 0.0; factorSoFar = 0.0; pendingAdditiveOperator.clear(); pendingMultiplicativeOperator.clear(); display-setText(0); waitingForOperand = true; /! 30 /! 32 void Calculator:clearMemory() sumInMemory = 0.0; void Calculator:readMemory() display-setText(QString:number(sumInMemor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中学教师资格考试题及答案
- 2025年人工智能与大数据创业能力考试题及答案
- 2025年数学建模与应用能力考试试卷及答案
- 2025年计算机网络系统工程师考试试题及答案
- 2025年计算机应用基础考试卷及答案
- 2025年健康管理与促进专业综合考试试卷及答案
- 2025年财务审计的重要知识考试试题及答案
- 2025年儿童早期教育专业职业考试试卷及答案
- 2024年度浙江省护师类之主管护师考前冲刺模拟试卷A卷含答案
- 眼镜行业人员培训资料
- 2025年广东省高考物理试题(含答案解析)
- 2025年宜宾市英语七下期末复习检测试题含答案
- 项目管理从立项到结项全解析
- 全国导游人员资格考试单科综合测试卷(科目一:政策与法律法规)
- 中医诊断学考点总结
- 国家开放大学学习网电大证券投资分析形考任务12345答案
- 大件货物运输合同范本
- 《心电图机的操作》课件
- 投资控股集团有限公司安全生产责任制暂行办法
- 智慧工厂解决方案—灯塔工厂引领制造业数字化转型-白皮书
- 2019第五版新版PFMEA 注塑实例
评论
0/150
提交评论