基于ARM9的贪吃蛇游戏.doc_第1页
基于ARM9的贪吃蛇游戏.doc_第2页
基于ARM9的贪吃蛇游戏.doc_第3页
基于ARM9的贪吃蛇游戏.doc_第4页
基于ARM9的贪吃蛇游戏.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

基于ARM9的贪吃蛇游戏摘要本课程设计是使用我们学习过的嵌入式系统的有关知识,在ARM9嵌入式硬件开发平台和C/OS-II的软件开发框架下,实现一个还有AD转换,按键,LCD等硬件功能的实时多任务的简单贪吃蛇的设计。文中首先C/OSII系统和ARM9进行了介绍,然后对设计要求进行分析,给出了系统总体上设计,并对各个功能模块进行了介绍,紧接着给出了系统软件设计,最后介绍了系统的调试方法和测试结果。关键词:C/OSARM9嵌入式贪吃蛇一开发环境简介1、C/OS-II操作系统C/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等C/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。C/OS-II中最多可以支持64个任务,分别对应优先级063,其中0为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个,每个任务都有不同的优先级,用户在创建任务的时候定义该任务的优先级。C/OS操作系统中每个任务可以有5种状态:休眠态、就绪态、运行态、等待或挂起状态、中断态,在任一个时候,任务的状态一定是这5种状态之一。任务在等待消息、邮箱或者信号量等事件的到来的时候会进入挂起状态,当任务接到消息以后,则处于就绪状态。uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。uC/OS-II要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。在ANSIC中是使用malloc和free两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc和free的执行时间也是不确定。uC/OS-II中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uC/OS-II中提供了4种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。uC/OS-II采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。uC/os-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。随着信息化技术的发展和数字化产品的普及,以计算机技术、芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用的热点。对功能、可靠性、成本、体积和功耗严格要求的嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,其中嵌入式微处理器和嵌入式操作系统分别是其硬件和软件的核心。ARM处理器由于其具有小体积、低功耗、低成本、高性能等特点,广泛应用在16/32位嵌入式RISC解决方案中,几乎占有嵌入式微处理器市场分额的75%,本文选定三星公司生产的一款基于ARM920T核的高性能低功耗SOC芯片S3C2410作为移植方案的硬件平台。市场上主流的嵌入式实时操作系统有Vxworks、pSos、WinCE、Linux等,基于实时性、成本以及开发难度方面的考虑,我们选择uC/OSII开放源代码的嵌入式实时操作系统。采用基于ARM9的S3C2410嵌入式微处理器,可以使系统具备高性能的运算能力的同时便于与各种外设连接扩展,简化了硬件设计,维持小型化的同时降低了系统成本。uC/OSII作为一个源代码公开的操作系统,在具体应用中稳定可靠,并且支持uIPTCP/IP协议栈、ucGUI等,可扩展性强,功能强大。本系统采ARM9+uC/OSII开发设计,具有精度高、运行稳定、实时性好、抗干扰能力强、性价比高的特点,可以在各种工业场合中广泛应用,达到了设计的初衷。2、试验箱基本硬件信息1S3C2410-SCore小板:采用S3C2410X处理器,64MNANDFLASH64RAM。2Double100MEtherNet网卡:均由AX88796构成,采用现有电路但分配不同地址。34HOST/1DEVICEUSB接口:主USB口扩展为4个,由AT43301构成USBHUB,其中电源管理用MIC2525。USB从口保持处理器本身的1个。43UART/IrDA:保持2个RS232串口,增加1个RS485串口,1个IrDA收发器,均从处理器的UART2引出。5168PinEXPORT:有一个168Pin扩展卡插槽,并去掉已经被主板上各模块占用的资源。网卡部分还在局部总线上,其余电路包括168Pin扩展槽都在外部总线。6LCD:兼容多种LCD,可采用5寸256色屏或8寸16bit真彩屏,同时预留一个24bit接口。可以支持板外8bit或24bit屏。7TouchScr:采用ADS7843,预备了直接用2410内部ADC构成的转换电路接口8AUDIO:采用UDA1341,具有放音、录音等功能。9PS2KEYPAD:使用ATMEGA8单片机控制2个PS2接口和板载17键小键盘。两个PS2可接PC键盘和鼠标。10LED:使用ZLG7290只驱动8只小数码管。同时可作IIC总线实验。11POWERSUPPLY、RESET、RTC等必须资源。12ADC:板载3个电位器和选择跳线,同时在板上设模拟电压输入专用接口。13IDE/CF卡插座:支持2.5英尺的笔记本硬盘读写和IDE模式下的CF卡读写。14PCMCIA和SD卡插座:由EPM3128A100CPLD实现。15IC卡插座。由ATMEGA8单片机控制。16DC/STEP电机。步进电机采用74HC573扩展IO,软件形成时序来控制。同时剩余IO可以控制CAN等电路,以节省CPU的GPIO资源。17CANBUS:设置1个CAN口,采用MCP2510和TJA1050。18DoubleDA:设置两个DAC端口,采用MAX504接SPI总线。19GPRS/GPS扩展板不做在主板上,单独设计扩展板。注意GPS的RS232需要增加MAX3232芯片来转换为TTL才能引到168Pin插座上。3、ADS1.2集成开发环境ADS1.2ADS是ARM公司的集成开发环境,他的功能非常强大。ADS包括了四个模块分别是:SIMULATOR;C编译器;实时调试器;应用函数库。ADS1.2提供完整的WINDOWS界面开发环境。C编译器效率极高,支持c以及c+,使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。ADS由命令行开发工具,ARM实时库,GUI开发环境(CodeWarrior和AXD),适用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。二系统设计要求贪吃蛇游戏是一款经典的小游戏,它的原型是1976年,Gremlin平台推出了一款经典街机游戏Blockade。真正走红的是该游戏随诺基亚手机走向世界。本课程设计有关贪吃蛇的功能描述:1、可以通过嵌入式平台的键盘控制游戏,键盘中起作用的是方向键(2,4,6,8)和回车键,方向键控制蛇的上下左右运动,回车键控制游戏的继续和暂停。2、贪吃蛇由若干连续黄色方块构成,程序中随机出现一些“食物”(用蓝色的方块表示),贪吃蛇通过吃“食物”增加自身的长度并增加相应的分值。3、游戏分三个关口,第一关没有障碍物,第二关有2个障碍物,第三关有四个障碍物。4、贪吃蛇撞到矩形边界,障碍物或者自己身体的一部分,游戏即结束,重新开始。5、为了增加难度,加入AD转换器用于控制蛇的运动速度,这也是本设计的创新点。6、贪吃蛇每吃一个食物分数会增加,屏幕上显示得分和游戏所用时间。三系统总体设计本设计需要创建两个任务,系统结构框图如图3-1所示,任务状态切换如图3-2所示。具体的任务流程和任务所要完成的功能如下:在系统启动后,同时创建两个任务,任务一main_task和任务二snake_task。任务一主要功能是等待键盘消息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值。任务二主要功能是控制并在屏幕上显示蛇的移动和速度,并完图3-1系统结构框图图3-2任务切换框图任务一,任务二就绪是否有键盘消息任务一挂起任务二运行任务二挂起任务一运行系统初始化任务一任务二等待键盘消息控制蛇移动AD采样LCD显示图3-3系统主任务流程框图成对分数,游戏等级和其他相关参数的记录和显示。任务一为主任务,在创建任务的时候,赋给它的优先级别比任务二高,所以任务一优先运行,任务二处于就绪状态,因为任务一主要是等待键盘消息,在无键盘消息的时候,任务一被挂起,这时候任务二进入运行状态。1、任务一程序流程框图如图3-3所示,该任务完成对键盘消息的接收,识别,并改变相应变量2、任务二流程图:如图3-4所示,主要功能是控制蛇的速度并在屏幕上显示蛇的移动,并完成对分数、游戏等级、和游戏用时的记录和显示。四系统具体功能的实现1初始化初始化包括了硬件初始化和软件初始化。硬件初始化主要有AD转换器的初始化,LCD的初始化,串口初始化,ARM目标板的初始化等,软件初始化包括了系统初始化,游戏初始化。系统初始化包括了任务的建立,信号量的创建,变量的创建,系统文件初始化,初始化绘图设备上下文,系统实时时钟的初始化和函数的声明等,游戏的初始化,包括了有关参数属性的初始化化和游戏界面的初始化。硬件初始化:#defineADCCON_FLAG(0x115)#defineADCCON_ENABLE_START_BYREAD(0x11)#definerADCCON(*(volatileunsigned*)0x58000000)#definerADCDAT0(*(volatileunsigned*)0x5800000C)#definePRSCVL(496)#defineADCCON_ENABLE_START(0x1)#defineSTDBM(0x02)8等待键盘消息是否有按键按下识别是哪个按键是否如果蛇现在的方向是左或者右就把方向改成向上如果蛇现在的方向是左或者右就把方向改成向下如果蛇现在的方向是上或者下就把方向改成向左如果蛇现在的方向是上或者下就把方向改成向右如果游戏是运行的则改为竞争,静止就改为运行246/n图3-4游戏任务流程图#definePRSCEN(0x1Type=TP_SkHead;xNode-isBlock=1;HeadNode=xNode;UpdateNextNode(xNode,Left);xNode-PreDir=Left;/SnakeBodyxNode=&WorldArrayW_YSize/2W_XSize/2;xNode-Type=TP_SkBody;xNode-isBlock=1;UpdateNextNode(xNode,Left);xNode-PreDir=Left;/SnakeTailxNode=&WorldArrayW_YSize/2W_XSize/2+1;xNode-Type=TP_SkTail;xNode-isBlock=1;TailNode=xNode;UpdateNextNode(xNode,Left);xNode-PreDir=Left;RandCake();2判断蛇是否吃到食物判断蛇是否吃到食物的方法比较简单,只要判断蛇头的属性是否和下一个节点的属性一样。吃到食物后改变响应的游戏参数,并要让蛇的节数多三节,这时候要让变量lenadd加3,并且还要对蛇补画上一节,本设计采用补上蛇头的方法,要注意根据此时蛇的运动方向来确定新蛇头的坐标。,以后食物产生子程序能够判断食物已经被蛇“吃到”了,要重新产生食物。if(HeadNode-Type=TP_Cake)score+;if(score=5)flag1=1;elseif(score=10)flag2=1;LenToAdd+=CakeLength;RandCake();3判断游戏是否结束(1)蛇头撞到蛇身判断蛇是否撞到蛇身的方法可以从蛇头开始依次开始判断蛇头的属性是否和下一个方块的属性相同,一样的话即表明蛇撞到蛇身了,此时游戏结束。(2)蛇头撞到游戏界面边框判断蛇是否撞到边框的方法,只要比较蛇头的属性是不是同时边框的属性一样,一样的话,即表明蛇撞到边框,游戏结束。If(HeadNode-isBlock)nRet=1;/HitaBlockgotoSnakeStep_End;4蛇移动功能这部分功能是游戏的主体,实现蛇移动的方式是首先擦除蛇尾,擦除的方发是改变蛇尾的属性,通过调用绘图上下文设备,蛇尾就变成白色底色不可见,然后从蛇尾开始,依次改变下一个节点的属性。例如刚开始蛇是5节,这时候依次把第2四节的属性给第1节;把第3节(即蛇头)的属性给第2节;把第4四节的属性给第3节;把第4节(即蛇头)的属性给第3节;把第5节

温馨提示

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

最新文档

评论

0/150

提交评论