收藏 分享(赏)

arm7的移植和游戏设计.doc

上传人:cjc2202537 文档编号:1195653 上传时间:2018-06-17 格式:DOC 页数:9 大小:80.50KB
下载 相关 举报
arm7的移植和游戏设计.doc_第1页
第1页 / 共9页
arm7的移植和游戏设计.doc_第2页
第2页 / 共9页
arm7的移植和游戏设计.doc_第3页
第3页 / 共9页
arm7的移植和游戏设计.doc_第4页
第4页 / 共9页
arm7的移植和游戏设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

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 real-time ope

2、ration 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 could be solidi

3、fied 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 the gluttony s

4、nake 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/OSII 可移植性非常好,很容易就能被移

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

6、较深入的了解;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 的编程规范。下面的程序清单为应用程序的 main()函数以及相关的代码,应用程序主函数:

7、int main(void)OSInit ();OSTaskCreate (Task0,(void *)0, /创建任务 0KeyMbox = OSMboxCreate(NULL); / 建立一个邮箱,用于传递按键消息OSStart ();return 0;在使用 C/OSII 提供的任何功能之前,必须调用函数 OSInit (),它完成C/OSII 的初始化并建立空闲任务,在开始多任务之前,必须建立至少一个用户任务(不包括 C/OSII 的空闲任务),这是通过调用函数OSTaskCreate()或函数 OSTaskCreateExt()实现。最后函数 main()调用函数OSStart()将

8、控制权交给 C/OSII 内核,main()函数也就结束了。然后编写任务的代码,C/OSII 规定任务是不允许返回的,不过程序一般通过死循环实现,或者通过调用函数 OSRaskDel()来实现。任务代码框架如下:Void Task0(void *pdata)Pdata=pdata; /避免编译警告TargetInit(); /目标板初始化For(;)程序代码; 2.2 实现目标简介将 C/OSII 移植到 LPC2210 上,利用 C/OSII 的任务管理系统对于所有的任务进行管理调度。建立三个任务(不包括空闲任务) ,其中一个高优先级的任务一直实现液晶初始化,显示开机画面和定义游戏的暂停开始

9、及退出按键;另外两个低优先级的任,分别实现游戏方向键定义和游戏运动画面等功能。任务 0 一开始初始化液晶,显示游戏的开机画面,然后创建任务 1 和任务2 并将任务 2 挂起,处于待开始阶段,然后建立一个死循环,用来不停地扫描键盘,实现游戏的退出、暂停、恢复游戏等功能。任务 1 则定义开始游戏后的方向键,其中扫描键盘之前建立一个邮箱,当有按键时将按键信息发送到邮箱,然后根据要实现的功能从邮箱中取回按键值实现游戏的控制功能,然后将邮箱清空。任务 2 则创建贪食蛇游戏的运动轨迹,定义游戏中的边界,绘制贪食蛇游戏中的豆子,和定义游戏是否结束。游蛇运动采用了连续赋值的思路,首先开始游戏的时候绘制蛇头、蛇

10、身、和蛇尾,其中将蛇尾定义成结构体,并定义蛇尾的坐标为 snake.a0和 snake.b0,分别为蛇尾的横坐标和纵坐标。然后游蛇蛇头向前运动,并将原先的蛇头坐标赋给蛇身,蛇身原先的坐标赋给蛇尾,如果蛇身增长则把蛇尾原先坐标赋给增加的蛇身,然后擦除游蛇左右一节图形。在任务 2 执行的时候任务 0 和任务 1 都同在执行,同时为了保证按键的准确,按键的延时时间小于绘制游蛇的延时时间。三系统的设计与实现3.1 硬件系统构架硬件部分的主要是由外部Flash存储器、按键电路、JTAG接口、液晶接口。采用的液晶模块为 RT240128A 作为图形界面的输出显示。RT240128A 点阵图形液晶模块的点像

11、素为 240 128 点白色字/蓝色底 STN 液晶屏,视角为6:00 内嵌控制器为东芝公司的 T6963C 外部显示存储器为 32K 字节模块的电路原理框图如下图所示图 3.1 液晶原理图EasyARM2200 开发板可以直接支持 RT240128A 点阵图形液晶模块或相兼容的液晶模块应用连接电路如图 5. 23 所示采用 8 位总线方式连接 RT240128A 点阵图形液晶模块的没有地址总线显示地址和显示数据均通过 DB0 DB7 接口实现由于模块工作电源是 5V 而 LPC2210 的 I/O 电压为 3.3V 所以在总线上串接 470 保护电阻图形液晶模块的 C/D 与 A1 连接用于

12、控制模块处理数据/命令将 C/D 与 A1 连接有一个好处就是 LPC2210 可以使用 16 位总线方式操作该图形液晶模块(高 8 位数据被忽略) 模块的片选信号由 LPC2210 的 A22 和外部存储器BANK3 片选 CS3 相或后得到当 A22 和 nCS3 同时为 0 时模块被选中所以其数据操作地址为 0x83000000 命令操作地址为 0x83000002,使用 LPC2210 的总线对RT240128A 点阵图形液晶模块操作控制前先要设置芯片的外部存储器控制器(EMC) 。液晶与 ARM7 连接电路图如下图所示:图 3.2 液晶连接电路图设计中的图形用到了 GUI_Clear

13、SCR()、GUI_RectangleFill()、GUI_LoadPic()个函数,其中贪食蛇的蛇和食物是通过用字模工具将用图像处理工具处理好的图片转换成字模得到,用 GUI_RectangleFill()实现绘制游蛇边界和擦除图片的功能,用 GUI_LoadPic()则调用字模生成的图片显示在液晶上。下面介绍这几个函数的使用。1GUI_ClearSCR() 功能是清屏,入口参数和出口参数均无void GUI_ClearSCR(void) GUI_FillSCR(0x00);绘制游蛇的边界图案显示游戏界面右边的静态图片和计分清零其中 GUI_FillSCR()是全屏填充,直接使用数据填充显示

14、缓冲区 ,入口参数: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 种一开始将屏幕清屏,然后绘制贪食蛇游戏的边界和计分状态,最后进入一个无限循环,在循环体中根据游戏者的按键进行相应的处理,详细流程图如下图所示:初始化蛇的位置以及蛇的游动方向等待键盘扫描任务发来的消息判断按键的值改变蛇游动的方向重新创建任务2,重新开始游戏把任务 2 挂起,使游戏暂停延时Reset 键 暂停键方向键 图 3.3 贪食蛇吃豆的任务流程图游戏结束否?更新蛇的位置,将蛇头原来坐标赋给蛇身,蛇身原来坐标赋给蛇尾。

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

17、测中的应用资助项目,课题编号2004340。参考文献1 Jean 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 10-bit ADC and external memory interface Rev. 02 30 May 2005 5 ARM嵌入式系统实验教程(一)北京航空航天大学出版社,周立功等编著6 ARM 嵌入式系统软件开发实例北京航空航天大学出版社,周立功等编著

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 大学论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报