没有合适的资源?快使用搜索试试~ 我知道了~
基于ARM9的贪吃蛇游戏.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 71 浏览量
2023-07-05
19:42:23
上传
评论
收藏 139KB DOC 举报
温馨提示
试读
28页
基于ARM9的贪吃蛇游戏.doc
资源推荐
资源详情
资源评论
基于 ARM9 的贪吃蛇游戏
摘要
本课程设计是使用我们学习过的嵌入式系统的有关知识,在 ARM9 嵌入式硬
件开发平台和μC/OS-II 的软件开发框架下,实现一个还有 AD 转换,按键,LCD
等硬件功能的实时多任务的简单贪吃蛇的设计。文中首先μC/OSII 系统和 ARM9
进行了介绍,然后对设计要求进行分析,给出了系统总体上设计,并对各个功能
模块进行了介绍,紧接着给出了 系统软件设计,最后介绍了系统的调试方法和
测试结果。
关键词:μC/OS ARM9 嵌入式 贪吃蛇
一 开发环境简介
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 个任务,分别对应优先级 0~63,其中 0 为
最高优先级。63 为最低级,系统保留了 4 个最高优先级的任务和 4 个最低优先
级的任务,所有用户可以使用的任务数有 56 个,每个任务都有不同的优先级,
用户在创建任务的时候定义该任务的优先级。μC/OS 操作系统中每个任务可以
有 5 种状态:休眠态、就绪态、运行态、等待或挂起状态、中断态,在任一个时
候,任务的状态一定是这 5 种状态之一。任务在等待消息、邮箱或者信号量等事
件的到来的时候会进入挂起状态,当任务接到消息以后,则处于就绪状态。
uC/OS-II 的时间管理是通过定时中断来实现的,该定时中断一般为 10
毫秒或 100 毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程
来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。
uC/OS-II 要求用户在定时中断的服务程序中,调用系统提供的与时钟
节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。
在 ANSI C 中是使用 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/OS II——开放源代码的嵌入式实时操作系统。
采用基于 ARM9 的 S3C2410 嵌入式微处理器,可以使系统具备高性能的
运算能力的同时便于与各种外设连接扩展,简化了硬件设计,维持小型化
的同时降低了系统成本。uC/OS II 作为一个源代码公开的操作系统,在具
体应用中稳定可靠,并且支持 uIP TCP/IP 协议栈、ucGUI 等,可扩展性强,
功能强大。本系统采 ARM9+uC/OS II 开发设计,具有精度高、运行稳定、实
时性好、抗干扰能力强、性价比高的特点,可以在各种工业场合中广泛应
用,达到了设计的初衷。
2、试验箱基本硬件信息
1.S3C2410-S Core 小板:采用S3C2410X 处理器,64M NANDFLASH 64RAM。
2.Double 100M EtherNet网卡:均由AX88796 构成,采用现有电路但分配不同地
址。
3.4 HOST / 1 DEVICE USB 接口:主USB 口扩展为4个,由AT43301 构成USB
HUB,其中电源管理用MIC2525。USB 从口保持处理器本身的1个。
4.3 UART/IrDA:保持2个RS232 串口,增加1个RS485 串口,1个IrDA 收发器,
均从处理器的UART2 引出。
5.168Pin EXPORT:有一个168Pin 扩展卡插槽,并去掉已经被主板上各模块占用
的资源。网卡部分还在局部总线上,其余电路包括168Pin 扩展槽都在外部总线。
6.LCD:兼容多种LCD,可采用5 寸256 色屏或8 寸16bit 真彩屏,同时预留一个24bit
接口。可以支持板外8bit 或24bit 屏。
7.TouchScr:采用ADS7843,预备了直接用2410 内部ADC 构成的转换电路接口
8.AUDIO:采用UDA1341,具有放音、录音等功能。
9.PS2 KEYPAD:使用ATMEGA8 单片机控制2个PS2 接口和板载17键小键盘。两个
PS2 可接PC 键盘和鼠标。
10.LED:使用ZLG7290 只驱动8 只小数码管。同时可作IIC 总线实验。
11.POWER SUPPLY、RESET、RTC 等必须资源。
12.ADC:板载3个电位器和选择跳线,同时在板上设模拟电压输入专用接口。
13.IDE/CF 卡插座:支持2.5 英尺的笔记本硬盘读写和IDE 模式下的CF 卡读写。
14.PCMCIA 和SD 卡插座:由EPM3128A100 CPLD 实现。
15.IC 卡插座。由ATMEGA8 单片机控制。
16.DC/STEP 电机。步进电机采用74HC573 扩展IO,软件形成时序来控制。同时
剩余IO 可以控制CAN 等电路,以节省CPU 的GPIO 资源。
17.CAN BUS:设置1个CAN 口,采用MCP2510 和TJA1050。
18.Double DA:设置两个DAC 端口,采用MAX504 接SPI 总线。
19.GPRS/GPS 扩展板不做在主板上,单独设计扩展板。注意GPS 的RS232 需要增
加MAX3232芯片来转换为TTL 才能引到168Pin 插座上。
3 、ADS1.2 集成开发环境
ADS1.2 ADS 是 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 开发环境(Code Warrior 和
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 目标板的初始化等,软件初始化包括了
系统初始化,游戏初始化。系统初始化包括了任务的建立,信号量的创建,变量
的创建,系统文件初始化,初始化绘图设备上下文,系统实时时钟的初始化和函
数的声明等,游戏的初始化,包括了有关参数属性的初始化化和游戏界面的初始
化。
硬件初始化:
#define ADCCON_FLAG (0x1<<15)
#define ADCCON_ENABLE_START_BYREAD (0x1<<1)
#define rADCCON (*(volatile unsigned *)0x58000000)
#define rADCDAT0 (*(volatile unsigned *)0x5800000C)
#define PRSCVL (49<<6)
#define ADCCON_ENABLE_START (0x1)
#define STDBM (0x0<<2)
8
等 待 键 盘
消息
是否有按
键按下
识别是哪
个按键
是
否
如果蛇现在的方向是左或
者右就把方向改成向上
如果蛇现在的方向是左或
者右就把方向改成向下
如果蛇现在的方向是上或
者下就把方向改成向左
如果蛇现在的方向是上或
者下就把方向改成向右
如果游戏是运行的则改为
竞争,静止就改为运行
2
4
6
/n
剩余27页未读,继续阅读
资源评论
omyligaga
- 粉丝: 54
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功