您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 基于嵌入式系统的游戏程序设计
基于嵌入式系统的游戏程序设计0引言随着近年来计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流。嵌入式系统被定义为以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统是面向用户、面向产品、面向应用。而广泛用于制造工业、过程控制、通信、仪器、仪表等,消费类产品,如果独立于应用自行发展,则会失去市场。嵌入式处理器在功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间的竞争热点。嵌入式处理器的应用软件是实现嵌入式系统功能的关键。软件要求固化存储,软件代码要求高质量、高可靠性。1开发平台一个完整的嵌人式系统结构如图1所示,设计中采用的硬件平台为基于IntelXscale架构的PXA255开发板,CPU运算速度为400MHz,FLASH为32MB容量的IntelStrataFLASH,SDRM容量为64MB,USBSlave支持USB1.1,LCD支持640×480分辨率。由图1可以看出,一个完整的嵌入式系统不仅包含有硬件平台,还有运行于该硬件平台的操作系统和基于该操作系统的应用软件,而嵌入式LinUX只是众多嵌入式操作系统中的一个。从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,例如比较著名的有Vxwork,pSOS,Neculeus,QNX,ECOS,LYNX,PalmOS和WindowsCE,这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且源代码的封闭性也大大限制了开发者的积极性。另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux推广提供广阔的发展前景。再者,对上层应用开发者而言,嵌入式系统需要的是一套高度简练,界面友善,质量可靠,应用广泛,易开发、多任务,并且价格低廉的操作系统。基于以上情况,采用嵌入式Linux操作系统作为开发的软件平台。2交叉编译工具链在嵌入式系统软件的开发过程中,交叉编译工具链是极为重要的一环,设计并制作良好的交叉编译工具链是顺利实现软件开发的重要保障。2.1ARM-Linux的gcc交叉工具链设计采用的Linux操作系统是经过修改与裁剪的ARM-Linux;使用的开发工具是非图形开发工具gcc。gcc交叉编译工具一般情况下需自行制作,制作方法较为简单,这里不做详细介绍。制作一条比较完整的ARM-Linuxgcc交叉工具链主要用到如下软件包:binutils工具包(ftp://ftp.gnu.org/gnu/binutils);gcc编译器(ftp://ftp.gnu.org/gnu/gcc);glibc函数库(ftp://ftp.gnu.org/gnu/glibc);glibc-linuxthreads包(ftp://ftp.gnu.org/gnu/glibe);linux内核(ftp://ftp.kernle.org/pub/linux/kernel)。如果Linux内核低于2.6版本,还应下载相应的内核补丁。(ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/)2.2SDL图形库为使程序运行的界面更加友好和美观,在设计中要使用到图形函数接口,这就意味着要向前面的工具链(采用gcc工具链版本为3.3.2)添加第三方的图形函数库。设计中采用的SDL(SimpleDirectMediaLayer)图形库为免费的跨平台多媒体应用编程接口,具有丰富的函数库,便于开发者使用。2.2.1SDL常用到的开发包(1)SDL_Image:提供显示多种格式的图像显示接口,它支持bmp,png,jpeg,gif,tiff等;(2)SDL_Draw:提供画点线圆等几何图形的接口(SDL_gfx也含有这样的功能http://.ferzkopp.net/joomla/content/view/19/14/);(3)SDL_ttf:提供显示TTF文字的接口;(4)SDL_mixer:提供播放各种声音文件的接口。把SDL编译到工具链用的并非PC机本身带的gcc编译器,而是要用到第2.1节已经做好了的交叉编译工具链。其中使用的pkg-Config工具版本要在0.15.0版本或以上。SDL以及与SDL安装相关或有依赖关系的软件有:alsa-lib-1.0.15,audiofile-0.2.6,esound-0.2.38,freetype-2.1.9,jpegsrc.v6b,libid3tag-0.15.1b,libmad-0.15.1b,libpng-1.2.22,madplay-0.15.2b,SDL-1.2.12,SDL_draw-1.2.11,SDL_gfx-2.0.15,SDL_image-1.2.6,sdl_mad-0.1,SDL_mixer-1.2.8,SDL_ttf-2.0.9,tiff-3.8.2,tslib-1.3,zlib-1.2.3。2.2.2交叉编译的主要步骤主要步骤为:(1)设定环境变量:PREFIX为安装目录;CROSS为ARM-Linux-;PKG_CONFIG_PATH为pkgcon-fig的路径;ARCH在这里设成ARM;HOST注意要是ARM-Linux,而不是i386-linux(这与前面做ARM-Linux-gcc不一样);BUILD设置为i386-linux。编译时一定要指定CC,NM,AR等变量,让它们跟交叉编译器对应的工具关联起来,否则编译时将会采用PC机Linux的gcc编译器进行编译,不能达到交叉编译的目的。(2)按顺序依次编译如下软件:zlib编译命令行:./configure—shared—prefix=$PREFIX;make;makeinstall。freetype编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$PREFIX;make;makeinstall。libpng编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$PREFIX;make;makeinstall。libtiff编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$(PREFIX)/usr--without-x--enable-zlib--with-zlib-include-dir=$(PREFIX)/include—with-zlib-lib-dir=$(PREFIX)/lib--with-jpeg-include-dir=$(PREFIX)/include—with-jpeg-lib-dir=$(PREFIX)/lib;make;makeinstall。tslib编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$(PREFIX)--cache-file=$(ARCH)-linux.cache--sysconfdir=$(PREFIX}/etc--enable-static&&;make;makeinstall。Libmad编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);make;makeinstalllibid3tag编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);makemakeinstallmadplay编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX);make;makeinstallalsa编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;makeinstall。audiofile编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;makeinstall。esound编译命令行:./configure--host=$(HOST)--build=$(BUILD)-prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;makeinstall。SDL编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-esd-exec-prefix=$(PREFIX)--disable-video-directfb;make;makeinstall。sdl_image编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX)--enable-sdhest;make;makeinstall。sdl_tff编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-freetype-exec-prefix=$(PREFIX);make;makeinstall。sdl_draw编译命令行:./configure-host=$(HOST)--build=$(BUILD)prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;makeinstallsdl_mixer编译命令行:./configure--host=$(HOST)--build=$(BUIUD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;makeinstallsdl_mad编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;makeinstall至此,整个工具链就制作完成,打包并做好备份。这个工具链并不限于只用于制作该工具的Linux操作系统上使用,同样可用于别的Linux环境。3开发环境设置嵌入式系统通常为一个资源受限的系统,直接在嵌入式系统的硬件平台上编写软件比较困难,有时甚至是不可能的。一般嵌入式软件开发采用的办法是先在通用计算机上编写程序,然后通过交叉编译,生成目标平台上可运行的二进制代码格式,最后下载到目标平台上的特定位置上运行。仅安装好Linux系统和开发工具,还没有真正完成设计所需要的开发环境。SDL只是一个图形的函数库,它向上提供图形函数接口,向下调用系统图形引擎来画图。它支持的图形引擎有很多,这里采用Linux内核自带的FrameBuffer,代码简洁,十分适用于嵌入式软件开发。如果在开发板上的Linux的/dev/目录及其子目录下没有找到fb0或fb1或其他类似名称的设备时,则很有可能正在使用的内核没有FrameBuffer驱动。此时只能重新定制内核,选择对FrameBuffer支持和相关的驱动,再进行内核编译。4主要解决问题对于一个人机对弈的嵌入式五子棋游戏来说,主要应解决图形显示、人工智能算法、键盘事件处理3个问题。4.1图形显示图
本文标题:基于嵌入式系统的游戏程序设计
链接地址:https://www.777doc.com/doc-2574906 .html