基于Qt的嵌入式终端应用程序——五子棋游戏开发.doc_第1页
基于Qt的嵌入式终端应用程序——五子棋游戏开发.doc_第2页
基于Qt的嵌入式终端应用程序——五子棋游戏开发.doc_第3页
基于Qt的嵌入式终端应用程序——五子棋游戏开发.doc_第4页
基于Qt的嵌入式终端应用程序——五子棋游戏开发.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学士学位毕业设计(论文)基于Qt的嵌入式程序开发五子棋游戏 学生姓名:陈春宇学 号:20114075104 指导教师:李文顺 所在学院:信息技术学院专 业:电子信息工程中国大庆2015年05月黑龙江八一农垦大学本科毕业设计(论文)任务书学生姓名陈春宇所在班级电子2011(1)导师姓名李文顺导师职称副教授论文题目基于Qt的嵌入式终端应用程序开发五子棋游戏题目分类1应用与非应用类:工程 科研 教学建设 理论分析模拟2软件与软硬结合类:软件硬件软硬结合非软硬件(1、2类中必须各选一项适合自己题目的类型在内打)主要研究内容及指标: 1. 用Qt-creator进行五子棋应用程序的设计。1) 建立主机开发环境;2) 开发应用程序;2. 将应用程序移植到arm2440开发板上。主要参考文献:1 金春霞,白秋产基于Qt技术开发与实现北京:中国青年出版社,20022 于建新,贾世祥嵌入式应用程序开发综合实验9例北京:清华大学出版社,20043 基于arm2440之Linux移植开发实战指南4 侯捷,孟岩智能五子棋算法的设计实现5 彭建国,张书五子棋开局指南阶段规划:1. Qt的基本内容的学习,包括软件安装和库函数,API函数,组件工具的应用,信号和曹函数的运用等基本技能的理解和学习。2. 熟练运用Qt尝试进行五子棋游戏的程序编写和界面处理,学习arm的系统移植和第三方资源库的配置,学习熟悉应用程序的烧写过程。3. 全部完成五子棋游戏的应用程序,并且烧写进开发板。最后成功运行。开题时间2015.3.2完成论文时间2015.5.24专家审定意见:系主任签字:年 月 日注:1任务书由指导教师填写后交给学生,要求学生妥善保存。2此任务书夹于论文扉页与论文一并装订,作为论文评分依据之。摘要摘要人工智能与生物工程、空间技术并称为二十一世纪的三大尖端技术,是近几年非常活跃的研究领域之一。它主要是研究如何使计算机去做那些只能靠人力才能做的事情。人机对战是人工智能研究的其中一个分支,它的研究为人工智能带来了许多的重要的方法和理论,并且产生了广泛的社会和学术影响。研究其计算机算法,可以让我们看到人工智能的雏形,也有助于我们人脑的开发。更有五子棋的游戏源于我国,研究它不仅让更多的外国人了解五子棋,更有助于我国优秀文化的推广和传播。本论文以五子棋游戏作为研究课题,对五子棋的算法与规则做了研究,阐述了如何在 Linux下用 Qt来开发实现五子棋游戏并且给出了具体实现的方法。关键词:五子棋 Qt 人工智能 arm2440IVABSTRACTABSTRACTArtificial intelligence and biotechnology, space technology, and known as the 21st century the three cutting-edge technology, in recent years, a very active field of research is one of the. It mainly studies how to make the computer do that only rely on manpower to do. Man-machine war is the artificial intelligence research where a branch, its research for artificial intelligence has resulted in a number of important method and theory, and produced a wide range of social and academic impact. The study of computer algorithms, we can see the prototype of artificial intelligence development, but also help us to human brain. More Gobang game source in our country, the it not only let more foreigners to understand Gobang, but also help in the promotion and dissemination of the excellent culture in our country. This paper takes the chess game as the research subject, the Gobang algorithm and rule to do the research, elaborated how in linux using QT to develop to achieve Gobang game and give the concrete method of realizing the.Keywords: Gobang Qt artificial intelligence arm2440前言目录摘 要IAbstractII前言IV1 绪论11.1 选题的目的和意义11.2 课题研究的主要内容11.3 五子棋的一些规则和术语12 系统需求分析32.1 系统需求32.2 功能需求32.3 系统的设计目标33 系统开发的技术背景53.1 Qt技术53.2 arm2440开发板简介53.3 Linux操作系统简介63.4可行性分析64 系统总体设计84.1 五子棋游戏设计原则84.2 五子棋游戏的总体设计结构85 系统模块设计95.1 用Qt-creator进行五子棋应用程序的主要功能实现95.2将应用程序移植到arm2440的开发板上136 系统调试186.1 五子棋游戏测试概述186.2系统设计和移植过程中出现的问题及解决方法18结 论21参考文献22致 谢23 前言在嵌入式技术的不断发展和推广下,嵌入式的应用领域也变得广泛起来。随着IC设计的不断发展衍生出的工业化ARM芯片,可以预见ARM微处理机在未来绝对是嵌入式开发的主宰。在开发五子棋人机对战中的计算机算法的同时,让我们看到人工智能的稚形,它有助于我们人脑的开发。五子棋最早是我国古代先人发明的,研究它不仅可以让五子棋更国际化,还助于我国优秀文化的推广。所以我们以五子棋游戏作为毕业设计的研究课题,更对五子棋的算法与规则做出研究,阐述如何在 Linux环境下用 Qt来开发五子棋游戏。所有用户界面都采用能跨多平台的Qt图形界面设计软件进行开发实现,这是因为Qt图形界面设计具有优良的跨平台、面向对象、丰富的API、大量的开发文档等诸多优点。目前,五子棋这一棋类运动已迅速在国际上发展起来。现如今已经有40多个国家和地区开展了五子棋相关活动和比赛。但由于人们对于五子棋不同的用意及使用方法,从而对五子棋的爱称也不一样,如韩国人把五子棋称为“情侣棋”,言下之意也就是说情人之间下五子棋有利于增加情感和交流;欧洲人则称之为“绅士棋”,喻棋手下五子棋的君子风度胜似绅士;美洲人称之为“商业棋”,意思可能是边下五子棋边谈生意,是商业贸易之桥;日本人则称之为“中老年棋”等等。但不同语言、地区的人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,以增进友谊。我国是上世纪90年代引进了五子棋世界规则,此后的十多年里,五子棋在民间开始迅速的传播开来。北京是五子棋发展最早也是普及最高的地区,1992年就成立了我国的第一个五子棋民间组织“京都五子棋社”。在北京的带动下,我国其他地区也先后成立了五子棋组织,从此积极的投身于这项益智的游戏中,2004年成立中国围棋协会五子棋分会,它属于中国五子棋界的领导机构,并且先后在部分地区组织俱乐部,组织比赛,让越来越多的人参与和喜爱这项活动,但是中国还是没有专业的棋手,在这方面的相关规则和体系还不完善,能够真正弄懂的人还是很少,所以中国在五子棋方面的发展空间是很大的,这就需要我们不断的努力探索和研究才能把五子棋发展的更加壮大。那么在现在网络五子棋游戏的产生也让更多的人收益,人们不仅可以和电脑下棋,还可以和异地的陌生人下棋,更可以在下棋的时候和对方交流心得,这就是我此次设计的主题,在未来的五子棋的发展来说的话,也许比赛的规则会改变,棋局会变的更复杂且所需的技巧也会越来越多,这就需要我们所有人的努力才会实现了。1 绪论1.1 选题的目的及意义五子棋对人的智力开发有一些益处,,并且在非智力因素上的帮助也是很明显的,比如毅力、耐心、细心、思考方式等等。五子棋起源于我国古代,有着广泛的群众基础。但与世界先进的五子棋技术相比,我们的棋艺水平还有待进一步提高,所以我们要积极地推广五子棋,宣传五子棋。中国作为五子棋的发源国,不仅要回到国际大家庭中,更重要的是要靠我们的力量为五子棋在下个世纪的发展起到世界性的推动作用,并为国际连珠棋成为奥运项目做出自己的贡献!1.2 课题研究的主要内容开发主机装有Linux 。我们选择QT-embedded-2.3.4和Qtopia作为开发环境,下载RPM包并安装。Qt Embedded和Qtopia函数库:包含了完整的开发嵌入式Linux应用程序的核心函数库。主要完成的任务有NFS配置及使用,嵌入式Linux开发交叉编译器的安装,Bootloader 的编译与烧写,Linux 内核的编译与烧写,根文件系统的烧写与NFS挂载,编译第三方库,即在开发板上Qt所用到的库文件。安装完这些,再加上g+(GNU C+编译器),就可以进行基于Qtopia应用程序的开发、编译和调试了。1.3 五子棋的一些规则和属术语五子棋游戏是专业围棋的变体。五子棋的规则尽管比起那些围棋要复杂一些,但它仍旧很简单(Sakata 和Ikawa,1981),这个游戏是在一个15*15的棋盘的交叉点上进行的。垂直线用字母A到O标注,水平线用数字1到15标注。棋盘左下方的位置的A1.黑棋白棋两位玩家轮流执他们自己的颜色的棋子放在棋盘中空的十字交叉点上。执黑子的玩家先开始下棋,并且必须把棋子放在棋盘的正中间(H8)。最先完成五子连线(垂直、水平或斜线方向)的玩家获胜。五子棋中黑子有一些限制,例如,对于黑子来说有些落子是被认为禁止的,如果黑子落子被禁止不是偶然的就是被迫的,那么白子就获胜了,禁止黑子落子的情况有: 长连, 双四, 双三(具体定义见第三部分)。白子没有禁止落子的情况,所以白子也可以制造一个长连来赢得游戏,如果没有选手成功的完成五子连线,并且黑子没有禁止落子和棋盘已经满了,则认为这盘游戏平局。下面我们提供一系列术语以及他们的定义。长连:六个或六个以上的同色棋子连成一线,垂直方向、水平方向或斜线方向(图2“A”处)。五珠:精确的只有五个同色的棋子连成一线,垂直方向、水平方向或斜线方向。冲四:四个同色棋子连成一线(垂直、水平或斜线方向)并且两边的位置是空的,是一定会赢得一种情况(图2“D”处)。四珠:四个一种颜色的棋子连成一排,再添加一个棋子就能连成五个。三珠:三个相同颜色的棋子连成一线,或是在三个棋子间有一个空位,只要再下一个相同的棋子在空位就能形成冲四。双四:只下一步棋,就能形成一个同时存在的不止一排形成四子连线(图2“B”处)。双三:只下一步棋,就能形成一个同时存在的不止一个三子连线(图2“C”处)。四三:只下一步棋,就能形成一个四子连线和一个三子连线同时存在的情况,对于黑子的胜利这是一种常用的办法去建立一个胜利的布局(图2“E”处)。图 22 系统需求分析随着现实生活中生活节奏的加速,生活压力的加大,休闲娱乐变得越来越重要。五子棋子游戏,玩法简单,娱乐性也很高。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。通过对五子棋的设计与开发,了解和掌握游戏开发的原理与方法。让电脑像人脑一样思考,一直是人工智能发展的最终目标。作为一门边缘学科,它有诸多的研究领域,博弈即为其中之一。所以对于本次研究可谓是集休闲功能和科学研究两不误了。2.1系统需求五子棋作为一款休闲益智游戏,它最大的优点在于游戏规则家喻户晓,简单,上手快,趣味性强,所以受广大用户青睐,在各大提供棋牌类游戏的平台都可以看到玩五子棋游戏的人很多。休闲益智游戏中等级并不是最重要的追求目标,通过对游戏规则的熟悉,能很快上手掌握其操作方式,也更适合男女老幼全家共同娱乐,花费时间简短,速战速决,在短时间内感受到游戏的乐趣,完全享受气氛轻松活跃的游戏过程。此种娱乐方式既不耽误时间也能轻松调剂娱乐,充分适合现代人们的娱乐需求。更主要的是开发了人的智力,成为年轻一代最流行的游戏,据统计,五子棋游戏的玩家中,学生占了接近三分之一的比例,对学生的智力健康成长起一定作用,正所谓休闲娱乐两不误。2.2 功能需求本应用要求界面简洁,美观,交互性要比较强。操作方便,得体,把五子棋游戏规则中最基本的规则体现出来,比如“悔棋”、“重来”等。五子棋还有一大特点就是速战速决,电脑应在很短时间内就应做出判断,所以要合理的设计判断胜负的函数。由于“禁手”这一规则很复杂,所以在本应用中,采用“无禁手”的规则,让规则简单化。这样,让初学的人对五子棋有更加高的可控度,能够真正体会到下五子棋的快乐。在黑方或者白方任意一方获得胜利,都能及时的显示胜负的一方。2.3 系统的设计目标设计基于Qt的五子棋程序接收的各种消息可以分为两类:一类是由硬件装置产生的消息(如鼠标被按下),另一类是由玩家发送的消息。当指定事件发生时,游戏判断胜负的算法会根据下棋的相应的位置来进行。需要实现的的游戏重要功能:1.主窗口:负责管理所有的部件,创建所有信号和槽的连接2.棋盘类:绘制棋盘,把棋盘看成一个二维数组,处理鼠标点击事件,在点击处一定范围内绘制棋子,然后最主要的就是算法,就是怎么走才算赢,这个要花时间研究3.胜负显示,使游戏的人体会到胜利的快乐。4.设计按钮达到控制开始、重来、悔棋、退出等功能。结合实际玩家需要,运用Qt技术设计出五子棋游戏。要用鼠标来获取坐标(mousePressEvent(),点击的时候应有一定的范围。增加图形界面类(paintEvent(),把显示功能从棋盘类中脱离出来,棋盘只负责棋子坐标数据的存储和更新。mRecord类对下棋方的相关信息进行了记录,mnextturn变量对轮到哪一方下棋进行了记录。为使用界面更加的美观,打算给界面贴一张背景图(label-setPixmap(),棋盘的网格没有用QPainter类的drawline()来实现,因为直接画出来的线条不美观。棋子本身没有用采用QPainter类的drawEllipse()画圆并填充来实现,而是直接drawImage()贴图来实现。设计的开始、重来、退出、悔棋按钮都用QPushButton类来实现,并实现信号和槽函数的链接。游戏玩家可以根据游戏按键来控制游戏的开始,暂停和结束,在进入游戏后,玩家可以通过鼠标点击来下棋,让玩家体会到游戏的快乐以及战斗的快乐。3 系统开发的技术背景本设计与建设过程中应用的主要技术有用Qt开发五子棋应用程序的开发,还有就是应用程序的移植,包括u-boot的烧写,内核的裁剪,根文件系统的烧写,编译第三方库文件。 3.1 Qt技术介绍Qt是一个多平台的C+图形用户界面应用程序框架,它是基于面向对象的思想进行相应开发的,支持真正意义上的组件编程,可以为不同用户提供华丽的用户界面。信号和插槽机制是 Qt 的核心机制,也是 Qt 的核心特性。 Qt 有着自身的特点,不同于其他界面开发软件,其中一个重要的地方,便是信号与插槽机制。信号和插槽是 Qt 自行定义的一种通信机制,Qt 编程语法是完全符合标准 C/C+语言的,但是信号与插槽机制却是独立于标准的 C/C+,因此要正确的处理信号和插槽,必须借助一个称为 moc(Meta Object Compiler)的 Qt工具,该工具是一个 C+预处理程序,它为高层次的事件处理自动生成所需要的附加代码。信号/槽机制是在QObject类中实现的。在QObject类或者其一个子类(比如:QWidget类)继承的所有类中,都存在了信号和槽。当对象改变其状态的时候,信号被发送,对象不关心有没有其他对象接收到这个信号。槽是类的正常成员函数,可以将信号和槽通过connect()函数任意连接。当一个信号被发射,它所连接的槽会被立即执行,如同一个普通函数调用一样。Qt 的安装和配置:1.下载Qt安装包2.安装Qt Creator,再安装Qt Libraries3.打开Qt Creator,选择工具|选项对话框,在构建和运行中点击添加按钮,选择qmake.exe文件。4.跟着新建项目的向导一步一步做就可以了,项目的工作目录不能有中文,否则make的时候会报错。3.2 arm2440开发板简介Arm2440是由飞凌嵌入式技术有限公司设计生产的一款嵌入式开发平台,适用于设计移动手持设备类产品。Arm2440开发板采用核心板+底板设计,性能稳定可靠,具有高性能、低功耗、接口丰富和体积小等优良特性。目前已成功移植Linux,WINCE等操作系统到开发板。Arm2440开发板采用核心板+底板结构,开发板的布局和走线经过精心设计,可稳定运行在400MHz。接口丰富,功能强大,适用于各种手持设备,消费电子和工业控制设备的开发。三星公司推出的这款16/32 位RISC 处理器S3C2440A,是面向高端手持设备或其它一般应用而设计的芯片。整体设计融合了MMU、AMBA BUS 和Harvard结构。具有独立的16KB 指令Cache 和16KB 数据Cache。3.3 Linux操作系统简介Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在安装linux系统的时候我们必须交叉编译已下载的linux源码。我们编译的是 2.6 的内核,采用的交叉编译器为 3.4.1 版本。编译命令:make menuconfig(基于文本选单的配置界面)交叉编译就是在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。如 keil 软件,在 keil 上编译,但在单片机上运行,典型的交叉编译。我们在开发板上运行的程序,是在PC机上编译的,所以是交叉编译。3.4可行性分析进行可行性分析是非常必要的,也是很重要的,本系统的可行性研究主要是参考已存在并正处于运行的类似系统和经过最初的设计目标及进行的市场调查分析为评价尺度,考虑其技术可行性、经济可行性和操作可行性。可行性研究是为了弄清楚系统开发的项目如何用最小的代价在尽可能短的时间内确定问题是否能够解决,是否值得进行研究的过程,实际上进行可行性分析大大简化了系统设计的过程。LINUX系统属于开放源代码软件,由于LINUX系统具有稳定、安全、网络负载力强、占用硬件资源少等技术特点,自问世以来得到了迅速推广和应用,并已发展为当今世界的主流的嵌入式操作系统之一。LINUX在嵌入式的广泛应用不是偶然的,这就取决于LINUX操作系统特点。LINUX是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了LINUX的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。这让LINUX吸收了无数程序员的精华,不断壮大。Arm2440开发板的价格也是可以接受的,且有用户指导手册,便宜开发,易于使用。本应用使用Qt开发,Qt具有良好的可靠性、可用性、可编程性与易用性。它有优良的跨平台特性,Qt支持Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX 、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390、QNX等等众多的操作系统;并且Qt 的良好封装机制也使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的;Qt还支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换;Qt也提供了大量的联机参考文档,有超文本HTML方式,也有UNIX帮助页Man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程;还有Qt的便利性,支持 2D/3D 图形渲染,支持 OpenGL。以及本身丰富的 API。Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的,甚至还包括正则表达式的处理功能。本应用前台作为与用户直接交互的界面,在设计考虑功能的同时,也考虑了操作的简洁和方便性,设计了方便用户使用的按钮,如开始按钮,重来按钮,退出按钮,悔棋按钮,目的是让大多数不熟练电脑操作的客户,也能轻松的享受本系统给他们带来的便利。因此该系统在操作上是可行的。4 系统总体设计4.1 五子棋游戏设计原则一个好的游戏往往要遵循游戏的设计原则,主要是从实用性,先进性,兼容性和规范性上进行设计。而各个原则的具体描述如下。1实用性原则:确保具有良好的系统性能,友好的用户界面,较高的处理效率。2先进性原则:采用先进而成熟的技术,使软件具有较高的技术水平和较长的生命周期。3兼容性原则:对于所选硬件系统及平台,能很好地适应开发和使用。4规范性原则:软件设计过程尽量按照规范进行,系统编码,操作系统平台以及所采用的开发方法也按照相应的标准。4.2 五子棋游戏的总体设计结构本系统主要包括包括绘制出棋子和棋盘,设置出开始、重来、悔棋、退出等按钮功能。用到了鼠标点击事件的处理,绘制棋子,和棋盘的函数drawpixmap()的使用。还有胜负的判断显示。需要实现的的游戏主要功能:(1)主窗口:负责管理所有的部件,创建所有信号和槽的连接(2)棋盘类:绘制棋盘,把棋盘看成一个二维数组,处理鼠标点击事件,在点击处一定范围内绘制棋子,然后最主要的就是算法,就是怎么走才算赢,这个要花时间研究(3)胜负显示,使游戏的人体会到胜利的快乐。(4)设计按钮,控制开始、重来、悔棋、退出等功能。5 系统模块设计5.1 用Qt-creator进行五子棋应用程序的主要功能实现本五子棋应用程序有绘制棋盘和棋子的功能,鼠标处理事件的实现,将鼠标坐标转换为方格子的坐标等多个主要函数。1.绘制棋盘和棋子的功能:void MainWindow:paintEvent(QPaintEvent* ) QPainter painter(this); QPainter greenPainter(this); greenPainter.setBrush(Qt:green); QRect rect1(10,10,695,554); painter.drawPixmap(rect,*mChessboardPixmap); QRect rect2(705,220,125,130); painter.drawPixmap(rect1,*mheifangPixmap); QRect rect3(830,220,125,130); painter.drawPixmap(rect2,*mbaifangPixmap); QRect rect4(690,0,331,231); painter.drawPixmap(rect3,*mbanPixmap); QRect rect5(690,352,261,260); painter.drawPixmap(rect4,*mbanPixmap); QRect temptRect; int i; for( i=0; i225; i+) if(mGameLogic.mChessRecord.mRecordi.mPoint.x()pos(); if(p.x()0|p.y()=(745-170)/mSize.width()-mLeftMargin-mRightMargin) return(QPoint(-1,-1); QPoint g; int sizex=mgridSize.width(); int sizey=mgridSize.height(); if(p.x()-sizex)%sizex = sizex/2) g.setX(x/sizex); /if else g.setX(x/sizex+1); /else if(p.y()-sizey)%sizey = sizey/2) g.setY(y/sizey); /if else g.setY(y/sizey+1); /else return g;4.将方格子的坐标转换为鼠标坐标:QPoint MainWindow:changeGridToMouse(const QPoint g) QPoint p; if(g.x()0|g.y()0) return QPoint(-1,-1); int sizex=mgridSize.width(); int sizey=mgridSize.height(); int x=g.x()*sizex; int y=g.y()*sizey; x+=mLeftMargin; y+=mTopMargin; p.setX(x); p.setY(y); if(g.x()0|g.y()0) printf(int convertGridToMouse size:(%d,%d) grid x,y : %d,%d mouse x, y:%d,%d n,sizex, sizey, g.x(), g.y(), p.x(), p.y(); return p;5.计算direction 方向的side方棋子个数:/以x,y点为中心,计算direction 方向的side方棋子个数/0x15,0y15int GameLogic : CountStones(int x, int y ,int side, int direction) int count=1; int rx,ry; int dx=0,dy=0; rx=x;ry=y; switch(direction) case 0:/horizontal - dx=-1; dy=0; break; case 1:/vertical | dx=0; dy=-1; break; case 2:/ dx=-1; dy=-1; break; case 3:/ / dx=-1;dy=1; break; /每条线上两个方向 for(int i=0; i=0&rx+dx=0&ry+dy=5 |CountStones(x,y,z,1)=5 |CountStones(x,y,z,2)=5 |CountStones(x,y,z,3)=5) return true; else return false;5.2将应用程序移植到arm2440开发板上将应用程序移植到arm2440的开发板上主要完成的有嵌入式Linux开发交叉编译器的安装,Bootloader的编译与烧写等。嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者用网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。BootLoader 就是在操作系统内核运行之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS 那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader 来完成。Bootloader 的实现严重依赖于具体硬件,在嵌入式系统中硬件配置千差万别,即使是相同的CPU,它的外设也可能不同,所以不可能有一个Bootloader 支持所有的CPU、所有的电路板。即使是支持CPU 架构比较多的U-Boot,也不是一拿来就可以使用的(除非里面的配置刚好与你的板子相同),需要进行一些移植。Linux 内核的编译与烧写、将Linux 内核采用arm-linux-gcc3.4.1 交叉编译生成uImage 格式的二进制文件,之后将其烧写入开发板的Flash 存储器。我们可以通过NFS方式挂载根文件系统。U-boot设置bootargs参数(启动参数)为console=ttySAC0,115200 root=/dev/nfs nfsroot=01:/work/nfsdir/rootfs ip=02:eth0其中01为nfs server ip地址,/work/nfsdir/为分享目录,根文件系统位于/work/nfsdir/rootfs;02为开发板 ip地址;root=/dev/nfs表示以NFS方式挂载根文件系统。然后编译第三方库,QTOPIA所依赖的库文件。1.安装交叉编译环境:将cross-2.95.3.tar.bz2 放到/usr/local/arm 文件夹下解压,# tar jxvf cross-2.95.3.tar.bz2这个命令会在你的/usr/local/arm/2.95.3 目录下安装arm-linux-gcc 交叉编译程序,然后在PATH 变量中添加一项:export PATH=/usr/local/arm/2.95.3/bin:$PATH测试:# arm-linux-gcc -v /该命令可查看编译器的版本解压qtopia-free-src-2.2.1.tar.gz(tar zxvf)2.编译e2fsprogs-1.39:要得到qtopia 所需的二個文件,uuid.h 及libuuid.so。# cd /root/yizhi/e2fsprogs-1.39设置环境变量# export PATH=/usr/local/arm/2.95.3/bin:$PATH# export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc# ./configure -enable-elf-shlibs -host=arm-linux-with-cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc-with-linker=/usr/local/arm/2.95.3/bin/arm-linux-ld-prefix=/usr/local/arm/2.95.3/arm-linux# make将e2fsprogs-1.39/lib/目录下uuid 的文件夹复制到yizhi/arminclude 下# cp -r /lib/uuid /root/yizhi/arminclude# cp lib/libuuid.so* /root/yizhi/armlib# cp /lib/libuuid.a /root/yizhi/armlib3.编译jpeg 库:解压tar zxvf jpegsrc.v6b.tar.gz 到/root/yizhi# cd jpeg-6b设置环境变量# export QTDIR=/root/yizhi/qtopia-free-2.2.0/# export QTEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia/# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH# export PATH=/usr/local/arm/2.95.3/bin:$PATH# export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc# ./configure -enable-shared修改生成的Makefile 文件:prefix = /root/yizhi/qt-2.3.10CC= /usr/local/arm/2.95.3/bin/arm-linux-gccAR= /usr/local/arm/2.95.3/bin/arm-linux-ar rcAR2= /usr/local/arm/2.95.3/bin/arm-linux-ranlib保存# cp jconfig.doc jconfig.h在你的qt-2.3.10 中建立4 个文件目录:/bin /include /lib /man/man1最后:# make# make install lib# cp jpeglib.h jconfig.h jmorecfg.h /root/yizhi/arminclude# cp /root/yizhi/qt-2.3.10/lib/libjpeg.so* /root/yizhi/armlib就可以给qt-embedded 添加好for arm 的libjpeg 库放到交叉编译的Lib 一份#cp/root/yizhi/qt-2.3.10/lib/libjpeg.so* /usr/local/arm/2.95.3/arm-linux/lib4.编译qtopia:vi /root/yizhi/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-arm-g+/qmake.conf将此行QMAKE_LIBS_QT = -lqte修改为QMAKE_LIBS_QT = -lqte -lpng -lz -luuid -ljpeg如果想让Qtopia 支持鼠标,需要修改$QPEDIR/src/qt/qconfig-qpe.h 文件注释如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论