ARM的移植和游戏设计_第1页
ARM的移植和游戏设计_第2页
ARM的移植和游戏设计_第3页
ARM的移植和游戏设计_第4页
ARM的移植和游戏设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、ARM7的移植和游戏设计俞建定 叶军 严洁卿【摘要】实时操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保稳定性和可靠性,便于维护和二次开发。C/OS-II是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,C/OS-II的鲜明特点就是源码公开,便于移植和维护。本文介绍如何将µC/OS-II操作系统移植到LPC2210,同时运用一种适用于uC/OS-II的图形界面ZLG/GUI来实现贪食蛇游戏。【关键字】实时操作系统µC/OS-II,ZLG/GUI,LPC2100,移植【Abstract】The application of the re

2、al-time operation system could predigest the development process of Embedded system, and guarantee the stability and reliability of it, as well as make it easy to maintain and re-develop the embedded system. C/OS-II is a real- time and multitask kernel based on a so called ”anticipated way”, it coul

3、d be solidified and cut, with very high stability and reliability. Besides, C/OS-II publishes its original code, and this very trait make it convenient for migrating and maintaining. this article describes how to Migrating on LPC2210 singlechip processors and introduces the process of programming th

4、e gluttony snake with ZLG/GUI, one of GUIs for uC/OS-II.【Keyword】 The Real-Time operation system, ZLG/GUI, LPC2100, Migrating一引言 当谈到进行嵌入式系统开发时,开发平台也是不可缺少的。开发平台通常具有多种功能和丰富的接口,用户只需要在上面进行应用程序开发就可以了,这样可以大大节约项目的开发周期, ARM7微处理器处理速度快、超低功耗、应用前景广泛、价格低廉,又由于µC/OSII采用C语言和汇编语言,其中绝大部分用C语言,结构非常简洁,同时µC/OSI

5、I可移植性非常好,很容易就能被移植到各种微处理器上,而且在移植过程中,用户只需要做少量的工作即可,以及µC/OSII具备了实时操作系统的全部性能,非常适合初次接触嵌入式技术的初学者和工作人员作为学习嵌入式技术使用。ZLG/GUI是一款嵌入式系统简易的图形用户界面,它提供了最基本的画点、线、圆形、圆弧、椭圆形、矩形、正方形和填充等功能,较高级的接口功能,由ASCII显示、汉字显示、图形显示、窗口和菜单等,支持单色、灰度、伪彩和真彩等图形显示设备。二移植µC/OSII要移植一个操作系统到一个特定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求:1. 对目标体系机构

6、要有很深的了解;2. 对OS原理要有较深入的了解;3. 对所使用的编译器要有较深入的了解;4. 对需要移植的操作系统要有相当的了解;5. 对具体适用的芯片也要有一定的了解;根据µC/OSII的要求,移植µC/OSII到一个新的体系结构上需要提供2个或3个文件:OS_CPU.H(C语言头文件)、OS_CPU_C.C(C程序源文件)及OS_CPU_A.ASM(汇编程序源文件)。21 编写应用程序 移植µC/OSII是为了在自己的系统使用µC/OSII。要在自己的系统中使用µC/OSII编写自己的应用程序,就必须遵守µC/OSII的编程规范

7、。下面的程序清单为应用程序的main()函数以及相关的代码,应用程序主函数:int main(void) OSInit (); OSTaskCreate (Task0,(void *)0, &TaskStk0TaskStkLengh - 1, 3); /创建任务0 KeyMbox = OSMboxCreate(NULL); / 建立一个邮箱,用于传递按键消息 OSStart (); return 0;在使用µC/OSII提供的任何功能之前,必须调用函数OSInit (),它完成µC/OSII的初始化并建立空闲任务,在开始多任务之前,必须建立至少一个用户任务(不包括&

8、#181;C/OSII的空闲任务),这是通过调用函数OSTaskCreate()或函数OSTaskCreateExt()实现。最后函数main()调用函数OSStart()将控制权交给µC/OSII内核,main()函数也就结束了。 然后编写任务的代码,µC/OSII规定任务是不允许返回的,不过程序一般通过死循环实现,或者通过调用函数OSRaskDel()来实现。任务代码框架如下: Void Task0(void *pdata) Pdata=pdata; /避免编译警告 TargetInit(); /目标板初始化 For(;) 程序代码; 2.2 实现目标简介将µ

9、C/OSII移植到LPC2210上,利用µC/OSII的任务管理系统对于所有的任务进行管理调度。建立三个任务(不包括空闲任务),其中一个高优先级的任务一直实现液晶初始化,显示开机画面和定义游戏的暂停开始及退出按键;另外两个低优先级的任,分别实现游戏方向键定义和游戏运动画面等功能。 任务0一开始初始化液晶,显示游戏的开机画面,然后创建任务1和任务2并将任务2挂起,处于待开始阶段,然后建立一个死循环,用来不停地扫描键盘,实现游戏的退出、暂停、恢复游戏等功能。任务1则定义开始游戏后的方向键,其中扫描键盘之前建立一个邮箱,当有按键时将按键信息发送到邮箱,然后根据要实现的功能从邮箱中取回按键值

10、实现游戏的控制功能,然后将邮箱清空。 任务2则创建贪食蛇游戏的运动轨迹,定义游戏中的边界,绘制贪食蛇游戏中的豆子,和定义游戏是否结束。游蛇运动采用了连续赋值的思路,首先开始游戏的时候绘制蛇头、蛇身、和蛇尾,其中将蛇尾定义成结构体,并定义蛇尾的坐标为snake.a0和snake.b0,分别为蛇尾的横坐标和纵坐标。然后游蛇蛇头向前运动,并将原先的蛇头坐标赋给蛇身,蛇身原先的坐标赋给蛇尾,如果蛇身增长则把蛇尾原先坐标赋给增加的蛇身,然后擦除游蛇左右一节图形。在任务2执行的时候任务0和任务1都同在执行,同时为了保证按键的准确,按键的延时时间小于绘制游蛇的延时时间。三系统的设计与实现3.1 硬件系统构架

11、硬件部分的主要是由外部Flash存储器、按键电路、JTAG接口、液晶接口。采用的液晶模块为RT240128A作为图形界面的输出显示。RT240128A 点阵图形液晶模块的点像素为240 ×128 点白色字/蓝色底STN 液晶屏,视角为6:00 内嵌控制器为东芝公司的T6963C 外部显示存储器为32K 字节模块的电路原理框图如下图所示图3.1 液晶原理图EasyARM2200 开发板可以直接支持RT240128A点阵图形液晶模块或相兼容的液晶模块应用连接电路如图5. 23 所示采用8 位总线方式连接RT240128A点阵图形液晶模块的没有地址总线显示地址和显示数据均通过DB0 DB7

12、 接口实现由于模块工作电源是5V而LPC2210 的I/O 电压为3.3V 所以在总线上串接470 保护电阻图形液晶模块的C/D 与A1 连接用于控制模块处理数据/命令将C/D 与A1连接有一个好处就是LPC2210可以使用16 位总线方式操作该图形液晶模块(高8 位数据被忽略) 模块的片选信号由LPC2210 的A22 和外部存储器BANK3 片选CS3 相或后得到当A22 和nCS3 同时为0 时模块被选中所以其数据操作地址为0x83000000 命令操作地址为0x83000002,使用LPC2210 的总线对RT240128A 点阵图形液晶模块操作控制前先要设置芯片的外部存储器控制器(E

13、MC) 。液晶与ARM7连接电路图如下图所示:图3.2 液晶连接电路图设计中的图形用到了GUI_ClearSCR()、GUI_RectangleFill()、GUI_LoadPic()个函数,其中贪食蛇的蛇和食物是通过用字模工具将用图像处理工具处理好的图片转换成字模得到,用GUI_RectangleFill()实现绘制游蛇边界和擦除图片的功能,用GUI_LoadPic()则调用字模生成的图片显示在液晶上。下面介绍这几个函数的使用。 1GUI_ClearSCR() 功能是清屏,入口参数和出口参数均无void GUI_ClearSCR(void) GUI_FillSCR(0x00); 其中GUI_

14、FillSCR()是全屏填充,直接使用数据填充显示缓冲区 ,入口参数:dat填充的数据(对于黑白色LCM,为0的点灭,为1的点显示) ,出口参数:无。 2GUI_RectangleFill() 功能是填充矩形。画一个填充的矩形,填充色与边框色一样。入口参数: x0矩形左上角的x坐标值 y0矩形左上角的y坐标值 x1 矩形右下角的x坐标值 y1 矩形右下角的y坐标值 color 填充颜色出口参数:无当color为1时则起到了填充的作用,当为0时起到了在一定范围内擦除图形的作用。3.3 按键控制 按键控制通过消息邮箱机制实现的。消息邮箱(简称邮箱)是µC/OSII中的另一种通信机制,可以

15、使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。通常该指针指向一个包含了“消息”的特定数据结构。 3.4 游戏设计在游戏程序中,主任务0主要完成一些初始化的工作,开机画面的显示。在任务2种一开始将屏幕清屏,然后绘制贪食蛇游戏的边界和计分状态,最后进入一个无限循环,在循环体中根据游戏者的按键进行相应的处理,详细流程图如下图所示:绘制游蛇的边界图案显示游戏界面右边的静态图片和计分清零初始化蛇的位置以及蛇的游动方向等待键盘扫描任务发来的消息判断按键的值 Reset键 暂停键 方向键 把任务2挂起,使游戏暂停重新创建任务2,重新开始游戏改变蛇游动的方向延时 图3.3 贪食蛇吃豆的任务流程

16、图 蛇的动态显示建立在任务2,主要是不停的更新蛇的位置,另外每更新一次还需要判断蛇是否碰到边界,是否碰到自己身子,是否吃到豆子等。其流程图如下图所示: 游戏 结束否? 是 否更新蛇的位置,将蛇头原来坐标赋给蛇身,蛇身原来坐标赋给蛇尾。是否碰到边界或自己身体 是游戏结束是否吃到豆子 否 是增加蛇身的长度更新豆子蛇身各坐标赋值延时图3.4 蛇的动态显示结束语本文提出了一个应用来介绍了ARM7的移植研究。在深刻研究µC/OSII的任务管理的前提下,利用uC/OS-II的图形界面ZLG/GUI来实现贪食蛇游戏。这套应用于多任务控制的特点,从而进一步简化系统开发的可操作性、可修改,维护性。整个

17、系统功能实现、演示操作方面,都已取得了较好的成果。本课题获得省教委蓝牙技术在气压检测中的应用资助项目,课题编号2004340。参考文献1Jean J.Labrosse著,邵贝贝译.嵌入式实时操作系统µC/OSII(第2版) 北京航空航天大学出版社 北京 2003年5月第1版2王田苗.嵌入式系统设计与实例开发基于ARM微处理器与µC/OSII实时操作系统(第二版) 清华大学出版社 北京 2003年10月第2版3 嵌入式应用程序开发综合实验9例基于博创ARM300教学平台和各类手持设备清华大学出版社 2004年6月第1版 4 LPC2210/2220 16/32-bit ARM microcontrollers; flashless with 64 kB,with

温馨提示

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

评论

0/150

提交评论