当前位置:文档之家› 基于嵌入式系统的游戏程序设计

基于嵌入式系统的游戏程序设计

基于嵌入式系统的游戏程序设计0引言随着近年来计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流。

嵌入式系统被定义为以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

嵌入式系统是面向用户、面向产品、面向应用。

而广泛用于制造工业、过程控制、通信、仪器、仪表等,消费类产品,如果独立于应用自行发展,则会失去市场。

嵌入式处理器在功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间的竞争热点。

嵌入式处理器的应用软件是实现嵌入式系统功能的关键。

软件要求固化存储,软件代码要求高质量、高可靠性。

1开发平台一个完整的嵌人式系统结构如图1所示,设计中采用的硬件平台为基于Intel Xscale架构的PXA255开发板,CPU运算速度为400 MHz,FLASH为32 MB容量的Intel Strata FLASH,SDRM 容量为64 MB,USBSlave支持USB1.1,LCD支持640×480分辨率。

由图1可以看出,一个完整的嵌入式系统不仅包含有硬件平台,还有运行于该硬件平台的操作系统和基于该操作系统的应用软件,而嵌入式LinUX只是众多嵌入式操作系统中的一个。

从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,例如比较著名的有Vxwork,pSOS,Neculeus,QNX,ECOS,LYNX,Palm OS和Windows CE,这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且源代码的封闭性也大大限制了开发者的积极性。

另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux推广提供广阔的发展前景。

再者,对上层应用开发者而言,嵌入式系统需要的是一套高度简练,界面友善,质量可靠,应用广泛,易开发、多任务,并且价格低廉的操作系统。

基于以上情况,采用嵌入式Linux操作系统作为开发的软件平台。

2 交叉编译工具链在嵌入式系统软件的开发过程中,交叉编译工具链是极为重要的一环,设计并制作良好的交叉编译工具链是顺利实现软件开发的重要保障。

2.1ARM-Linux的gcc交叉工具链设计采用的Linux操作系统是经过修改与裁剪的ARM-Linux;使用的开发工具是非图形开发工具gcc。

gcc交叉编译工具一般情况下需自行制作,制作方法较为简单,这里不做详细介绍。

制作一条比较完整的ARM-Linux gcc交叉工具链主要用到如下软件包: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.2 SDL图形库为使程序运行的界面更加友好和美观,在设计中要使用到图形函数接口,这就意味着要向前面的工具链(采用gcc工具链版本为3.3.2)添加第三方的图形函数库。

设计中采用的SDL(Simple DirectMedia Layer)图形库为免费的跨平台多媒体应用编程接口,具有丰富的函数库,便于开发者使用。

2.2.1SDL常用到的开发包(1)SDL_Image:提供显示多种格式的图像显示接口,它支持bmp,png,jpeg,gif,tiff等;(2)SDL_Draw:提供画点线圆等几何图形的接口(SDL_gfx也含有这样的功能http://www.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;make install。

freetype编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$PREFIX;make;make install。

libpng编译命令行:./configure —host=$(HOST)—build=$(BUILD)--prefix=$PREFIX;make;make install。

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;make install。

tslib编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$(PREFIX)--cache-file=$(ARCH)-linux.cache--sysconfdir=$(PREFIX}/etc--enable-static &&;make;make install。

Libmad编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);make;make installlibid3tag编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);make make installmadplay编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX);make;make installalsa编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。

audiofile编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。

esound编译命令行:./configure--host=$(HOST)--build=$(BUILD)-prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。

SDL编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-esd-exec-prefix=$(PREFIX)--dis able-video-directfb;make;make install。

sdl_image编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX)--ena ble-sdhest;make;make install。

sdl_tff编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-freetype-exec-prefix=$(PREFIX);make;make install。

sdl_draw编译命令行:./configure-host=$(HOST)--build=$(BUILD)prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;make installsdl_mixer编译命令行:./configure--host=$(HOST)--build=$(BUIUD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PRE FIX);make;make installsdl_mad编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;make install至此,整个工具链就制作完成,打包并做好备份。

相关主题