WINCE 实验指导书_第1页
WINCE 实验指导书_第2页
WINCE 实验指导书_第3页
WINCE 实验指导书_第4页
WINCE 实验指导书_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

WINCE 系统实验指导书系统实验指导书 WINCE 系统实验指导书 1 实验一 Windows CE 系统平台的创建及模拟器的使用 2 一 实验目的 2 二 实验内容 2 三 预备知识 2 四 实验设备 2 五 实验原理 3 六 实验步骤 4 七 思考题 11 实验二 Windows CE BOOTLOADER 实验 12 一 实验目的 12 二 实验内容 12 三 预备知识 12 四 实验设备及工具 12 五 实验原理及步骤 12 六 思考题 30 实验三 Windows CE 驱动开发 31 一 实验目的 31 二 实验内容 31 三 预备知识 31 四 实验设备及工具 31 五 实验原理及说明 31 六 实验步骤 33 七 思考题 40 实验四 Windows CE 应用程序开发 41 一 实验目的 41 二 实验内容 41 三 预备知识 41 四 实验设备及工具 41 五 实验原理及说明 41 六 实验步骤 44 七 思考题 58 实验一 实验一 Windows CE 系统平台的创建及模拟器的使用 系统平台的创建及模拟器的使用 一 实验目的一 实验目的 1 了解WinCE 下的重要工具 模拟器 2 学习和模拟器相关的远程调试工具 3 学习WinCE 的调试手段 4 复习WinCE 开发工具Platform Builder 二 实验内容二 实验内容 建立WinCE 的PC 端模拟器 建立使用模拟器的配置 认识基于PB 端的WinCE 远程调试 工具 具体步骤如下 根据目标平台的特点和系统的需要 使用 Platform Builder 配置 WINDOWS CE 操 作系统的特性和功能 编译 链接操作系统内核 生成内核镜像文件 NK bin 将镜像文件下载 并在模拟器上运行生成的 WINDOWS CE 系统 同时 构建一个调试版 WINDOWS CE 系统 并实际调试该系统 三 预备知识三 预备知识 嵌入式系统调试手段和方法的基本概念 操作系统基本知识 Platform Builder 基本操 作 四 实验设备四 实验设备 硬件 PC 一台P3 以上 内存不小于384MB 安装完工具硬盘剩余空间不得小于600M ARM9 实验箱 包含NETARM2410 S 实验板 JTAG 仿真器 各种串口线 并口线 网线 光 盘 等 一台 软件 PC 操作系统Win2000 以上 ADS1 2 集成开发环境 Platform Builder 4 2 版本 Source Insight3 0 五 实验原理五 实验原理 模拟器 emulator 是PB 的一部分 专用于调试在PB 下创建的内核及应用程序 模 拟器能够在PC 下模拟Windows CE 的物理平台 但实际上它只不过是一个运行在CPU Ring 3级别的用户程序 所以它的运行速度要比正常的物理平台要慢 模拟器仅支持x86 平台 它只能调试基于 Emulator x86 的内核和所有用x86 指令集编译的程序 模拟器有很大的 限制 这些限制使它只能运行简单的应用程序 但是有一点是好的 操作系统的大多数API 对于任何CPU 而言都是相同的 考虑到不受CPU 类型影响的简单程序 还是可以在模拟器 上调试的 学习PB 用它来创建内核而又没有实际的物理平台来调试 那么模拟器非常适 合 但模拟器的限制也非常多 所以即使在模拟器下调试过所有能够调试的内核特征 feature 或者称组件 你掌握的也不过是冰山一角 Windows CE net 的模拟器是嵌入式开发的非常重要的工具利器之一 通过模拟器可以 在开发端进行平台的模拟仿真验证 并且在PB 方面和EVC 方面都可以启动模拟器 通过模 拟器 可以模拟一个在线运行的WinCE 系统设备 使得针对硬件设备的调试可以放在PC 端 模拟实现 这对于整个开发过程中的设计和验证有着至关重要的作用 这一点和许多嵌入 式操作系统有相似之处 例如VxWorks 图1 1 Windows CE 模拟器窗口 注意 关于模拟器的硬件限制 摘自Windows CE 帮助文档 仅能模拟DEC 2114x 网卡驱动来提供网络支持 其它网卡驱动不支持 仅能模拟FLAT 显示驱动 其它显示驱动不支持 不支持USB 设备 不支持PC 卡 硬盘 CF 卡 不支持FAT CDFS DVD 文件格式 六 实验步骤六 实验步骤 1 使用PB 建立一个X86 体系下的模拟器 方法和上一个实验讲过的方法类似 以下简单概括一下过程 1 利用向导建立工程 第一步如图所示 图1 2 工程建立第一步 点击 Next 进入下一步 如图所示 图1 3 工程建立第二步 在这里可以选择你需要的设备 也可以使用Custom configuration 自己定制 点击 Next 进入下一步 如图所示 图1 4 工程建立第三步 图1 5 工程建立第六步 图1 6 工程建立第七步 2 配置编译环境 首先需要设置Platform setting 对话框 选择Retail 模式 图1 7 设置Platform setting 对话框 确保Enable KITL Enable Kernel Debuger Enable Full Kernel Mode 三项都被选中 如图所示 图1 8 设置Platform setting 选项 图1 9 语言选项 3 编译 点击快捷按钮或者选择菜单Build Build Platform 编译工程 具体编译的时间和你 的机器配置有很大关系 编译完毕 在系统信息里面会显示编译完毕信息 errors warnings 并显示生 成的内核镜像文件 如图所示 图1 10 内核镜像文件 4 下载到模拟器 配置模拟器 编译成功后 单击 Target Configure Remote Connection 如图2 35 在弹出的对话框中找到 Download 下拉框 选择 Emulator 4 20 单击后面的 Configure 在弹出的对话框中设置分辨率为800 X 600 或640 X 480 系统内存设置为64MB 单击 OK 后 在 Kernel 下拉框中选择 Emulator 4 20 单击 OK 如图所示 图1 11 配置连接 图1 12 配置模拟器 启动模拟器 单击 Target Download Initialize 在下面的对话框点 Yes 图1 13 启动模拟器 等待一会 模拟器就出来了 可以看到标准外壳的界面 也就是桌面 图1 14 初始化下载 显示模拟器界面如下图 注意 模拟器在本地PC 的生成需要占用较大的内存和CPU 使用 所以应当保证足够的 可用内存 否则模拟器的运行将非常的慢 同时 由于PB 编译模拟器会产生大量文件 所 以必须保证Window CE net 系统目录所在分区有足够的硬盘空间 至少600M 否则在编 译 过程中会因磁盘空间不够而中止 图1 15 模拟器界面 七 思考题七 思考题 结合你的实验操作想一下 使用模拟器对于嵌入式开发有什么好处 实验二 实验二 Windows CE BOOTLOADER 实验实验 一 实验目的一 实验目的 1 掌握WinCE 的启动过程 2 掌握WinCE for S3C2410 中Bootloader 的基本工作原理 3 了解一般Bootloader 的开发方法 二 实验内容二 实验内容 学习NETARM2410 S 上WinCE Bootloader 的工作原理 了解各级boot 的功能 认识 Bootloader 在嵌入式操作系统中的一般开发方法 具体步骤如下 了解 WinCE 的启动过程 掌握 WinCE for S3C2410 中 Bootloader 的基本工作原 理 掌握两级 Bootloader 的不同功能 完成两级 Bootloader 的烧写 编译 链接操作系统内核 生成内核镜像文件 NK bin 通过 Eboot 下载镜像文件 最终在开发板上引导 WINDOWS CE 系统 三 预备知识三 预备知识 C 语言基本知识 操作系统体系结构基础知识 Bootloader 方面知识 四 实验设备及工具四 实验设备及工具 硬件 PC 一台P3 以上 内存不小于384MB 安装完工具硬盘空间不得小于600M ARM9 实验箱 包含NETARM2410 S 实验板 JTAG 仿真器 各种串口线 并口线 网线 光盘等 一台 软件 PC 操作系统Win2000 以上 ADS1 2 集成开发环境 Platform Builder 4 2 版本 Source Insight3 0 五 实验原理及步骤五 实验原理及步骤 1 Bootloader 概述 简单地说 Boot Loader 就是在操作系统内核运行之前运行的一段小程序 通过这段小程 序 可以完成初始化硬件设备 建立内存空间的映射图 和内核镜像建立通讯通道和调试 通道等等工作 从而将系统的软硬件环境带到一个合适的状态 以便为最终调用操作系统 内核准备好正确的环境 通常来讲 Boot Loader 是严重依赖于硬件而实现的 特别是在嵌入式系统中 有些部分 还不可避免的使用汇编语言实现 因此 在嵌入式的世界里几乎不可能建立一个通用的 Boot Loader 所以针对特定的处理器 必须专门来定制Bootloader 以实现不同的功能需 求 图2 1 bootloader 与其它结构的关系 绝大多数的Bootloader 实现的功能都无外乎两个 启动内核镜像和下载内核镜像 而二者 的区别在用户看来是不存在的 它们只针对开发人员 因此 Bootloader 的作用是看起来 很不起眼但实则是很重要的 启动加载 Boot loading 模式 即Bootloader 自动加载系统的过程 整个过程并没 有开发者和用户的介入 在正常条件下 必须保证这种启动方式的有效 特别是在嵌 入式产品发布的时侯 Boot Loader 必须直接工作在这种模式下以保证系统的正常运 行 下载 Downloading 模式 在这种模式下 目标机上的 Boot Loader 将通过串口连 接或网络连接等通信手段从主机 Host 下载文件 例如 下载内核映像和根文件系 统映像等 从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中 然 后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中 有的系统还将启动各 种通讯方法 BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用 此外 以后的系统更新也会使用 Boot Loader 的这种工作模式 工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口 并可以执行简单 的交互 如下图2 2 所示 图2 2 Boot Loader 结构图 2 烧写Bootloader 2410 S 上的CE 系统和其他RTOS 不同 它具有两级Bootloader 来引导内核镜像 在 Bootloader 阶段 比起其他系统Bootloader 来讲要复杂的多 1 Nboot Nboot NandFlash Bootloader 是2410 S 上WinCE 的第一级Bootloader 位于Nand Flash的Block0 主要负责初始化Flash 读取TOC 等等工作 最后将Eboot 内容拷贝到 RAM 中 把CPU 执行权交给Eboot 接管 Nboot 可以使用ADS 开发 也可以使用其他工具 来开发 使用SJF 来把Nboot 部分Bootloader 烧写在第0 个block 中 使用方法如下 修改BIOS 中计算机并口的选项 设置并口为 378 模式 安装Giveio 驱动 具体安装请参考Giveio 的说明 之后在平台和PC 之间连接好JTAG 下载线 在命令行运行SJF2410 f 2410loader bin 回车 可以看到如下图界面 注 在这里三次选择顺序为注 在这里三次选择顺序为 000 012 的 的 图 2 3 选择K9S1208 prog 即输入 0 回车 如图所示 图 2 4 选择K9S1208 Program 即输入 0 回车 如图2 5 所示 图 2 5 向block0 烧写 即输入 0 回车 之后看到出现 Epppp 字样表示正在向对应 的flash 中写入数据 烧写完之后选择 2 Exit 退出 如图所示 图 2 6 图 2 7 2 TOC TOC Table Of Content 是整个Nand Flash 中存储内容的一个列表 这里面储存了有关 启动和系统内核的一些相关存储信息 需要写在Nand Flash 的block1 中 由Nboot 里的 函数读取 之后Nboot 会按照读取的内容进行配置和跳转到不同的地址 使用文本查看工 具可以看到TOC 的主要组织形式 如图所示 图 2 8 注 在这里三次选择顺序为注 在这里三次选择顺序为 001 012 的的 0 图 2 9 图 2 10 3 Eboot Eboot Ethernet Bootloader 是一种高级Bootloader 可以理解为一个伪的 KernelImage 位于从Nand Flash 的Block2 开始部分空间 它主要负责各个设备的初始化 内存地址映射 文件系统 网络系统驱动和加载内核镜像的相关准备工作 已经是比较复 杂的Bootloader 了 使用Eboot 下载内核 Eboot 执行完毕之后可以通过控制台来下载真正的Kernel Image 并跳转到Kernel 来执行 这时系统就引导起来了 在执行过程中 Eboot 会根据需要改变TOC 中的内容 这样就记录下来当时的状态 例如 IP 地址 MAC 地址 启动信息等等 值得注意的是 只有在调试阶段才有使用Eboot 的必要 当系统设计完毕之后 可以通过 修改Nboot 来直接跳转执行Kernel Image 不再使用Eboot 来控制执行 这时 启动速度 会有很大提高 Boot Loader 由两部分组成 OEM 启动代码 OEM startup code 和主代码 maincode OEM 启动代码是最先执行的部分 它的功能是初始化内存寄存器 设置CPU频率 初始化高 速缓存等 之后它跳转到主代码中执行 一般OEM 启动代码都是用汇编编写 主代码一般 用C 语言编写 它负责其它所有任务 在执行的同时还能够将执行的相关信息显示在屏幕 上 一般添加公司LOGO 或者其它启动LOGO 都在此修改 主代码主要由几个部分组成 镜像下载代码 通过并口或者网卡来实现从远程计算机下载 nk bin 串口调试代码 包含对串口的读写函数 用户调用这些函数就可以通过串口在远 程计算机和本地计算机之间通信 写flash 代码 包含写镜像到flash 的函数 硬件监控 代码 一般的Boot Loader 的执行流程见下图 图 2 11 上图中每个函数的功能如下 StartUp CPU最先执行的函数 也就是启动代码 BootLoaderMain 先后调用KernelRelocate OEMDebugInit OEMPlatformInit OEMPreDownload等函 数 此函数源码文件路径为 WINCEROOT public common oak drivers ethdbg blcommon OEMDebugInit 初始化串口 OEMPlatformInit 执行特定平台的初始化工作 如时钟 一些驱动程序 OEMPreDownload 做下载前的准备工作 一般用于反馈给用户一些信息 DownloadImage 下载操作系统镜像到RAM或者Flash OEMLaunch 负责启动镜像 OEMReadData 从远程计算机读取数据 OEMMapMemAddr 专用于写Flash时使用 因为写flash的速度非常慢 所以此函数将Flash镜像临时缓 冲到RAM中 OEMShowProgress 从函数名就能看出 OEMIsFLashAddr 判断一个地址是否是Flash的地址 OEMFinishEraseFlash 判断是否完成了擦除Flash内容工作 OEMWriteFlash 写镜像到Flash OEMStartEraseFlash 开始擦除Flash OEMContinueEraseFlash 继续擦除Flash工作 可以看到 在Eboot 中 所有关于网络和系统的初始化工作都已经完成 并作好了下载 内核镜像的准备 DownloadImage 下载内核镜像 最后执行OEMLaunch 函数 跳转到内 核 开始地址运行 此后内核就接管了CPU 的使用权和控制权 Bootloader 退出控制 流程图如下图 图 2 12 Eboot 也需要使用sjf2410 在命令行中烧写 在命令行里面敲入sjf2410 f eboot nb0 选择K9S1208 再选择写入Block2 操作与烧写Nboot 完全类似 注 在这里三次选择的顺序为注 在这里三次选择的顺序为 002 012 的 的 图 2 13 图 2 14 3 控制台使用 Bootloader 下载好之后 可以运行控制台执行一些操作 控制台负责了有关启动内核的 基本操作 建立控制台如下图所示 建立超级终端对建立超级终端对 EBOOT 进行配置进行配置 图 2 15 图 2 16 图 2 17 在这里需要对端口进行设置在这里需要对端口进行设置 图 2 18 进入下画面后单击空格键就会进入进入下画面后单击空格键就会进入 EBOOT 的配置截面 即控制台 的配置截面 即控制台 图 2 19 Eboot 配置界面配置界面 图 2 20 功能解释 功能解释 1 为设备启动IP 及子网地址设定 2 为boot 延时的时间设定 3 选择是否设置动态IP 分配 这一级Boot 可以选择IP 分配方式 4 为重置TOC 为缺省设置 各项参数将还原为默认值 5 有两个选择 切换DOWNLOAD NEW 方式和LAUNCH EXIST 方式 6 选择是否将RAM 内的image 写入到Nand Flash 中去 如果是Disable 则系统掉电 将 不能被保存 7 选择修改MAC 地址 推荐避开主机的MAC 地址 8 选择是否开启Kernel Debug 功能 9 为格式化整片NandFlash 为二进制文件系统 这需要大约几分钟的时间 B 选择是否支持二进制文件系统 如果选择了9 则必须支持二进制文件系统 D 下载内核镜像 R 读取TOC 中实际配置数据 F 为低级格式化NandFlash 选择这一项将擦除flash 上包括Bootloader 的所有内容 L 运行NandFlash 上已有的内核镜像 W 将当前配置好的数据写到TOC 中保存 在这里主要对 1 5 6 7 9 等进行功能选择 其选项含义在下边有详解 注 1 IP 及子网地址设定 注 IP 要求同一网段网地址与 PC 相同 5 第一次下载选择 DOWNLOAD NEW 方式成功后改为 LAUNCH EXIST 方式 6 若不选择 ENABLED 将不会被写入 FLASH 中掉电后将会丢失 7 修改 MAC 地址 不要与主机发生冲突 二者设置不同 9 最好在下载新内核镜像时候先格式化 FLASH 否则可能会在下载新内核后出现一些 错误 4 对编译好的镜像内核进行下载 此镜像是通过 Platform Builder 4 2 来完成的 此工具软件可在微软网站下载 1 首先 在 Platform Builder 4 2 上建立一个工程 建立细节参考实验一 2 然后把 NK bin 放在你安装 Platform Builder 4 2 的盘符下如 C WINCE420 PUBLIC arm2410 RelDir SAMSUNG SMDK2410 ARMV4IDebug 注 arm2410 是建立的工程名字 3 在PB 中选择菜单中Target Configure Remote Connection 弹出如下对话框 选择相应的平台之后将 Download Kernel 都选择为 Ethernet 然后启动实验板 按空格进入控制台 监视超级终端 选择 D 选项下载新的内核 然后等待超级终端出现 Using device name SMDK241036864 EbootSendBootmeAndWaitForTftp Sent BOOTME to 255 255 255 255 Sent BOOTME to 255 255 255 255 或类似字样 图 2 21 图 2 22 图 2 23 选择 configure 等待选择的设备号 图 2 24 图 2 25 3 内核编译的时间一般较长 如果不想等待太久 可以将光盘中已经编译完成的NK bin 拷贝到系统的编译目录 winceroot PUBLIC NETARM2410 S RelDir SAMSUNG UT2410XARMV4Release 或类似的目录下 如果已经存在则覆盖之 使 用eboot 及Platform Builder 下载已经编译好的NK image 到目标设备上 其中NK bin 在 PUBLIC NETARM2410 S RelDir 图2 26 4 在上面对话框中点 configure 出现如下对话框 图2 27 在其中选择出现的设备名 之后 OK 然后确定 这时会出现下载进度 等待下载完 毕 下载完毕后目标板上的下载完毕后目标板上的WinCEWinCE 系统会自动运行 系统会自动运行 图 2 28 图 2 29 当 WINCE 操作系统成功启动后按实验平台的复位键重新启动 WINCE 操作系统并对 EBOOT 进行重新配置 5 改为 LAUNCH EXIST 方式 6 改为 DISABLE w 对修改过的选项进行保存 六 思考题六 思考题 1 Bootloader 在嵌入式操作系统中的作用和功能是什么 想一想 WinCE 中Bootloader 的形式和功能各是什么 2 想一想 如何修改nboot 代码使nboot 直接引导内核镜像启动 不经过eboot 阶段 提示 使用TOC 的不同内容 可以选择跳转到哪个 TOC 已经包含了系统的基本信息 实验三 实验三 Windows CE 驱动开发驱动开发 一 实验目的一 实验目的 1 学会使用WinCE 操作系统开发工具 2 熟悉开发环境 3 了解嵌入式系统驱动开发的基本思想和开发过程 二 实验内容二 实验内容 学习使用Platform Builder 4 2 集成开发环境 建立流驱动程序 了解 WinCE 基本系统体系架构 了解 WINDOWS CE 系统设备驱动基础知识和方法 学习使用 Platform Builder 4 2 集成开发环境 建立流驱动程序 三 预备知识三 预备知识 C 语言基本知识 设备驱动基础知识和方法 WinCE 基本系统体系架构 四 实验设备及工具四 实验设备及工具 硬件 PC 一台P3 以上 内存不小于384MB 安装完工具硬盘空间不得小于600M ARM9 实验箱 包含NETARM2410 S 实验板 JTAG 仿真器 各种串口线 并口线 网线 光盘等 一台 软件 PC 操作系统Win2000 以上 ADS1 2 集成开发环境 Platform Builder 4 2 版本 Source Insight3 0 五 实验原理及说明五 实验原理及说明 1 WinCE 驱动程序架构 目前WinCE 拥有两种驱动架构模型 一种是本机设备驱动 另一种是流接口设备驱动 其 中本机设备驱动已经被Microsoft 开发并由系统直接支持 由GWES 图形窗口及事件子系 统 统一管理和加载 流驱动则是由WinCE 设备管理器来管理的 这种组织形式相对于 UNIX体系来说是比较复杂的 本机设备驱动适合于集成到CE 平台的设备 例如电源驱动 它们已经成为了GWES 的一部 分 不表现为单个的DLL 使用 这些驱动程序通常和系统有着较为紧密的联系 所以通常 是和系统一起加载的 流设备驱动由于具有较好的可移植性和可扩展性 被设备管理器独立出来管理统筹 在本 实验中 将以一个示例的流驱动演示程序来讲述简单驱动的工作 下面的图3 1 中较为清楚的显示了单片形式存在的驱动和分层方式的驱动在WinCE 中的组 织情况 图3 1 驱动在WinCE 中的组织情况 2 流驱动程序 流驱动程序通过流驱动接口函数和设备管理器进行数据交互 并通过文件的形式来组 织 这一点和Unix 平台是很类似的 它以动态链接库形式存在 具有同一组接口并调用同 一个函数集的 流驱动面向的是各种各样的外设 主要的任务是把外设的使用传递给应用 程 序来使用 在WinCE 中设备文件通常是保存在固定的路径 Windows 目录下 通过注册表机 制来完成特殊的命名惯例 虽然流借口驱动程序具有普遍的特性 但是我们仍旧可以使用 不同的方法来实现它们 例如有些内部设备的驱动程序就是使用的流接口 另外尽管流接 口程序通常是由设备管理器程序加载和卸载的 但是有时候应用程序也执行加载和卸载的 任务 应用程序通过文件系统的API 来调用流接口函数 然后由流接口驱动程序调用本机 驱动或者通过设备管理器与系统内核外围设备通讯交互 最后直接驱动相关硬件执行动作 3 流接口驱动程序的一般标准入口 流接口驱动程序通常都具有如下的函数 具有一个统一的操作标准如表3 1 所示 表3 1 流接口驱动程序的函数 函 数 名 称 描 述 XXX Close 驱动程序关闭时候调用 XXX Open 打开一个设备驱动时调用 XXX Deinit 设备管理器或者应用程序卸载驱动时调用 XXX Init 设备管理器初始化设备时调用 XXX IOControl 上层软件进行IO 控制调用 XXX PowerDown 系统挂起前调用 XXX PowerUp 系统重新启动时调用 XXX Read 打开设备时候进行的读操作 XXX Write 打开设备时候进行的写操作 XXX Seek 对设备指针进行操作时调用 XXX Reinit 设备重复打开时调用 其中XXX 代表驱动文件名 由驱动类型的3 个大写字母缩写而成 规则由系统约定 详 细规则请参考帮助文档和MSDN 的说明 了解了这些函数的功用 就可以开始着手建立起来一个最简单的流驱动程序 它的功能 是向缓冲区中读写字符 六 实验步骤六 实验步骤 1 建立模拟器工程 运行Platform Builder 建立一个基于X86 体系的模拟器 下面的驱动程序建立都可以 在仿真器中模拟实现 注意需要在Applications RETAILMSG 1 TEXT MYSTRINGS STR Init t n memset achBuffer 0 BUFSIZE sizeof WCHAR dwReturn 1 return dwReturn BOOL STR Deinit DWORD hDeviceContext BOOL bReturn TRUE RETAILMSG 1 TEXT MYSTRINGS STR Deinit t n return bReturn DWORD STR Open DWORD hDeviceContext DWORD AccessCode DWORD ShareMode DWORD dwReturn 0 RETAILMSG 1 TEXT MYSTRINGS STR Open t n dwReturn 1 return dwReturn BOOL STR Close DWORD hOpenContext BOOL bReturn TRUE RETAILMSG 1 TEXT MYSTRINGS STR Close t n return dwReturn BOOL STR IOControl DWORD hOpenContext DWORD dwCode PBYTE pBufIn DWORD dwLenIn PBYTE pBufOut DWORD dwLenOut PDWORD pdwActualOut BOOL bReturn TRUE RETAILMSG 1 TEXT MYSTRINGS STR IOControl t n return bReturn void STR PowerDown DWORD hDeviceContext RETAILMSG 1 TEXT MYSTRINGS STR PowerDown t n void STR PowerUp DWORD hDeviceContext RETAILMSG 1 TEXT MYSTRINGS STR PowerUp t n DWORD STR Read DWORD hOpenContext LPVOID pBuffer DWORD Count DWORD darter 0 RETAILMSG 1 TEXT MYSTRINGS STR Read t n DWORD cbBuffer wcslen achBuffer dwReturn min cbBuffer Count wcsncpy LPWSTR pBuffer achBuffer dwReturn return dwReturn DWORD STR Seek DWORD hOpenContext Long Amount DWORD Type DWORD dwReturn 0 RETAILMSG 1 TEXT MYSTRINGS STR Seek t n Return dwReturn DWORD STR Write DWORD hOpenContext LPCVOID pSourcdBytes DWORD NumberOfBytes DWORD dwReturn 0 RETAILMSG 1 TEXT MYSTRINGS STR Write t n dwReturn min BUFSIZE NumberOfBytes wcsncpy achBuffer LPWSTR pSourceBytes dwReturn Return dwReturn 确定编写完毕保存 如果不想编写 也可以直接拷贝光盘中的MyDriver cpp 文件到工 作目录下 4 准备配置文件 Def 文件 复制光盘中的String Def 文件到工作目录下 Reg 文件 复制光盘中的StringReg reg 文件到工作目录下 Cec 文件 复制光盘中的MyDriver cec 文件到工作目录下 Makefile 文件和Sources 文件 复制makefile 和sources 文件到工作目录下 这些文件是 DLL 工程编译必须具备的配置文件 它们说明了关于驱动如何链接 编译路 径 和系统注册等等重要的工作 在编写新的DLL 时一般都需要进行改动甚至重写 这里 直 接拷贝光盘中的文件来实现 有兴趣的也可以使用文本查看软件 如Ultra Edit32 WinHEX 等 来打开这些文件 看看文件内部是如何配置的 拷贝完毕后 在PB 下导入CEC 文件 将MyDriver cec 拷贝到PB 当前工程目录下 模拟器 目录下 打开File 菜单 选择Manage Catalog Features 弹出一个属性对话框 如图3 6 图3 6 属性对话框 在右侧按钮中点击Import 选中MyDriver cec 导入当前工程目录 然后单击 OK 确 认完成 导入方法和导入平台BSP 的方法是相同的 可以发现驱动被添加到工程组件窗口中 在组件上点击右键 选择Add to Platform 完成系统的驱动添加 5 编译内核 和实验一的编译方法一样 点击来实现编译 特别注意现在是在使用模拟器 所以 在编译选项中应该选中 EMULATOR X86 WIN32 编译之前 在Build Option 选项标签中确保 Enable CE Target Control System Enable Kernel Debugger Enable KITL 被选定 这些选项允许内核向PB 传送调 试信息 单击 OK 确定 如图3 7 所示 图3 7 编译 6 加载驱动 内核编译完毕后开始在模拟器下加载 单击Target 下面选择Configue Remote Connection 弹出对话框如图3 8 所示 图3 8 加载驱动 选择Emulator 4 20 再点确定 在Target 菜单中选择Download Initialize 就 可以看到模拟器开始运行启动 一个模拟的WinCE 系统在窗口中显示出来 绝大多数的操 作 都可以使用了 此时在PB 的Debug 窗口中可以看到系统的启动调试信息 其中可以很清楚的看到驱动 模块被加载的状态 驱动运行成功 七 思考题七 思考题 1 想一下WinCE 中的驱动程序架构和其他系统中的有什么不同 2 WinCE 中的驱动程序中断处理是如何实现的 实验四 实验四 Windows CE 应用程序开发应用程序开发 一 实验目的一 实验目的 1 学习Windows CE 编程的基本方法 2 学习MFC 的应用 二 实验内容二 实验内容 学习在Windows CE 平台下 用EVC 编写一个全屏的俄罗斯方块的游戏 熟悉 EVC 集成开发环境 了解建立 WINCE 程序的一般方法 掌握 EVC 下常用开发向导的用法 熟练使用远程调试工具 三 预备知识三 预备知识 1 基本的VC 编程知识 编写和调试应用程序的基本过程 2 了解Windows 程序开发的流程及基于MFC 应用程序开发的基本知识 四 实验设备及工具四 实验设备及工具 硬件 PC 一台P3 以上 内存不小于384MB 安装完工具硬盘空间不得小于600M ARM9 实验箱 包含NETARM2410 S 实验板 JTAG 仿真器 各种串口线 并口线 网线 光盘 等 一台 软件 PC 机操作系统Win2000 或以上 EVC4 0 开发环境 WinCE420 标准 SDK NETARM2410 S 平台SDK Visual C 6 00 集成开发环境 五 实验原理及说明五 实验原理及说明 1 ClassWizard 类向导 类向导 从广义上讲 ClassWizard 与类的关系和AppWizard 与应用程序的关系是相同的 ClassWizard 通过生成实现CPP 文件 以及一个带有合适存根函数的头文件 来帮助你开 始编写新类 用实际的代码填充这些函数则是你的责任 ClassWizard 在四个区域提供帮助 它可以为如下目的生成代码 从接收消息或管理控件窗口的许多MFC 类中的一个派生出来的新类 处理消息的成员函数 n OLE ActiveX 方法 属性和事件触发 用于输入到对话控件中的数据交换和验证函数 ClassWizard 识别和支持MFC 基类 它们用某种方法与用户进行交互 除了少数例外的类 例如CRecordSet 和CHttpServer 之外 基类都是由CCmdTarget 派生而来 它们能够对 消息作出反应 并能够管理对话框中的控件 大约有50 个多个MFC 基类 你可以使用 ClassWizard 从这样的类中创建一个派生类 访问ClassWizard 不能从一个空的项目中访 问ClassWizard 项目中至少应有一个RC 文件 即使这个RC 文件是空的 一旦RC 文件被 附加到项目之中 AppWizard 可以自动完成这项工作 你就可以通过从View 菜单中选择 ClassWizard 命令来调用ClassWizard 对话了 关于ClassWizard 有两点不大明显 首先 它的服务完全是可选的 你在开发自己项目的 过程中 如果自己愿意的话 从头至尾 都可以不处理ClassWizard 其次 你可以使用 ClassWizard 向MFC 项目添加新类 即使该项目不是由AppWizard 创建的 ClassWizard编 译项目的类的数据库 并将它存储在与项目同名且扩展名为CLW 的一个文件之中 如果你 一直都是使用ClassWizard 为项目创建新类 那么CLW 文件可以保持最新 不过 在 VisualC 中 你与ClassWizard 之间并不是全有或全无的关系 你可以自由地编写新类 或者从当前项目之外的其他源文件中复制代码 在一个类不是以ClassWizard 为起源的情 况下 有一个简单的方法可以更新CLW 数据库 在你使用了Project 菜单上的Add To Project 命令向项目添加新类源文件之后 请删除CLW 文件 并再次调用 ClassWizard Visual C 将检测到数据库不存在了 并提供重新创建它的服务 ClassWizard 对话图 下图 显示了主ClassWizard 对话框 之所以叫它为 主 对话 是因为ClassWizard 可以在20 多种不同的对话中显示自己 究竟在哪一个对话中显示需取 决于环境 图中的对话充当着到ClassWizard 主入口的角色 将其命名为MFC ClassWizard 以便于让你记住它所处理的仅仅是MFC 类 ClassWizard 不能帮助你创建从 除了支持MFC 类之外的任何类中派生的类 对于带有任何其他基的类 你必须使用文本编 辑器或Insert 菜单上的New Class 命令从零开始自己编写代码 图4 1 MFC ClassWizard 对话的五个选项卡具有不同的用途 对于任何一个特定的类 都不是 完全需要这五个选项卡 下表可以帮助你确定自己需要哪个 或哪几个 选项卡 这主要 取 决于你想为自己的类做哪些工作 MFC ClassWizard 对话框的五个选项卡 选项卡 用途 Message Maps 消息映射 添加或删除处理消息的成员函数 Member Variables 成员变量 添加或删除附加到使用控件的类上的成员变量 一般地说 这些是从 CDialog CPropertyPage CRecordView 或 CDaoRecordView 中派生的对话类Automation 向 支持Automation 的类 例如ActiveX 控件类 添 加属性或方法 ActiveX Events为触发事件 通常是实现ActiveX 控件的类 添 加支持 在开发接收触发事件的容器应用程序时 不用该选项卡 Class Info有关项目的类的其他信息在ClassWizard 对话中 标为Message Maps 和Member Variables 的头两 个选项卡将在下两节介绍 Automation 和 ActiveXEvent 选项卡的讨论推迟到第8 章和第9 章 这两章将阐述ClassWizard 如何在包含 ActiveX 控件的项目开发中起帮助作用 在此 我们只介绍Message Maps 消息映射 选项卡 Message Maps 消息映射 选项卡是你为自己的类指定消息处理函数的地方 该选项卡中 的两个组合框和前两个列表框是这样安排的 每个控件都显示逐渐高一级的控件详细资料 换句话说 控件的内容取决于前面控件中的选中部分 ClassName 类名 组合框列出了 Project 组合框中选中的项目的类 Object IDs 框中显示的是与Class Name 框中选中的 类相关联的标识符 Message 框中显示的是Object IDs 框中当前选中部分的消息和其他信 息 当你在Message 框中选中一条消息或虚拟函数的时候 将在MFC ClassWizard 对话的底部 出现选中项目的简要说明 如果想了解有关选中项目的详细信息 可以像第一章中介绍的 那样切换到MSDN 在线帮助 然后再搜索索引 按下F1 键将显示有关Message 框本身的一般信息 而不是有关选中项目的信息 如果想向 选定的类添加消息处理程序函数 请双击Message 框中的消息或虚拟函数 MemberFunctions 框包含有当前类函数的一个列表 在图6 2 中是InitInstance 和 OnAppAbout W 标识符将OnAppAbout 作为一个处理带有WM 前缀的系统消息的函数来标 识 在本例中 是包含有ID APP ABOUT 菜单值的WM COMMAND V 用来将InitInstance 作为一个超越虚拟函数来标识 对于添加到类的每个消息处理程序函数 ClassWizard 对该类的源文件做三处修改 向头文件添向函数声明 向CPP 实现文件添加带有骨干代码的函数定义 将代表该函数的条目添加到类的消息映射 2 游戏设计需求 进行需求分析 游戏设计需求 进行需求分析 在全屏方式下进行游戏 形状不同的方块组合从屏幕顶端匀速下落 当某一行被方块填 满时则消去这一行 当方块堆积超出最上一行时游戏结束 3 实现原理 实现原理 游戏的设计离不开图像图案的处理 微软基础类库 mfc 封装了GDI 即 图形设备接 口 包含了各种绘图类及相关的绘图函数 而MFC 的CDC 提供了多种与绘图有关的函数 利用GDI 配合建立CDC 对象 就可以按照程序设计者的意愿在画布窗口上绘制一些图形 4 俄罗斯方块的实现算法 俄罗斯方块的实现算法 4 1 俄罗斯方块的玩法 传统的俄罗斯方块玩法很简单 随机产生的七种形状之一的方块从绘图区上部向下落 在下落过程中可以改变它们的位置及旋转固定的角度 方块落到绘图的下方堆积起来 如 果 任何一行被堆满则自动消去这一行 方块不断产生 直至堆积到绘图区顶端 游戏结束 4 2 相应的解决算法 随机产生方块可以调用rand 函数 此函数返回一个随机整数 程序中将此返回值对7 求模 就可得到随机产生的在0 和6 之间的整数 每一种整数对应一种形状的方块 方块 的自由下落可以看作是每过一定的时间间隔就下移一个单位高度 这个高度是可由程序来 控制的 这样 我们就可以通过定时起来完成每次下移一个单位高度的任务 设置定时器 使用函数SetTimer 该函数原型为 UINT SetTimer UINT nIDEvent UINT nElapse void CALLBACK EXPORT lpfnTimer HWND UINT UINT DWORD 其中回调函数不用我们指定 稍后通过ClassWizard 就可以让系统自动完成 当我们不想 让定时再继续工作的时候 可以调用函数KillTimer int nIDEvent nIDEvent 是定时 器的标识 方块下落有两种状态 可以继续下落和已经到底 如果组成方块的四个小部分 中任意一部分碰到了别的方块或是绘图区底部 则认为方块已到底 不能再继续下落了 如果没有 则还可再下落一个单位高度 方块下落后应该马上判断是否已到顶 如果已到顶 游戏就结束了 否则继续下一循环 如果方块已到底部 游戏还尚未结束 就要产生下一个新的方块 随机判断底部堆积的方 块 中有没有能够消去的行 如有则消去 随后新产生的方块继续下落 在本实验中 所有的绘图任务都由myDraw 函数来执行 这样当我们想要修改程序界面 或其他与图形相关的任务的时候 只要将注意力集中在此函数中就可以了 六 实验步骤六 实验步骤 1 新建工程 利用MFC AppWizard 建立一个基于对话框的应用程序 2 打开源文件的资源 修改对话框 如下图4 2 图4 2 a 源文件的资源 图4 3 b 修改后的对话框外观 对应的

温馨提示

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

评论

0/150

提交评论