导航:首页 > 编程语言 > 驱动测试程序的开发套路

驱动测试程序的开发套路

发布时间:2023-03-16 11:06:47

① 嵌入式驱动开发的基本流程

驱动一般过程是这样的:

  1. 首先了解你需要做的驱动的设备的规格,详细看看手册

  2. 了解设备的使用方法,通常厂野型家会提供一个测试的驱动程序代码

  3. 在你所移植的系统上编译驱动饥脊伏程序源代码,按烂携照手册进行测试

  4. 然后再根据自己的需要修改相关代码

② 什么是驱动测试 驱动测试

关于驱动大亏测试:测试驱动开发简称TDD,指交错进行测试和代码开发,是一种程序开发方法,也是极限编程的一部分。

其步骤如下:

  1. 识别所需的功能增量

  2. 针对此功能编写一个测试并实现为一个自动测试

  3. 运行此测试,以及所有已实现的其他测试

  4. 实现这个功能,核梁并重新运行这个测试

  5. 一旦所有的测试成功,转入去实现下一个功能

以上为 软件工程 一书所改仿运描述的,第八章 第二节。

我的理解是:先实现该功能的测试,然后实现功能,最后用先实现了的测试对实现的功能进行测试。

③ 驱动开发的步骤有哪些

步骤?没有什么现成的可作为规律来用的步骤。
开发驱动主要有两方面的基础专要求:
a,明属白你手头的硬件工作原理,包括处理器架构的知识,还有外设控制器的 datasheet 为必读之物;
b,假如你们要开发的整个系统是裸机程序,那你要开发的驱动程序就是一套和硬件打交道的函数库;但是假如你们计划在产品中使用一个操作系统,那开发驱动之前就需要熟悉这个操作系统的相关内部操作原理,因为你写的是驱动程序需要很好的“镶嵌”到这个操作系统的环境中去。

具体的,可以参考 JulianTec 的这篇文章:《应用程序,操作系统,驱动程序和硬件》

④ 如何在 Windows CE 5.0 中开发和测试设备驱动程序

本文介绍如何开发和测试 Windows CE 5.0 设备驱动程序。本文循序渐进地介绍如何创建流驱动程序,如何创建自定义 Windows CE Test Kit
(CETK) 测试,以及如何编写应用程序来测试驱动程序。这要花费大约 60 分钟来完成。

本页内容

第一部分:建立设备驱动程序
第二部分:测试流驱动程序测试代码
第三部分:检验驱动程序
第四部分:使用
Windows CE Test Kit
第五部分:创建自定义
CETK 测试
第六部分:确定谁拥有流驱动程序

小结

第一部分:建立设备驱动程序

在本练习中,您将使用 Platform Builder 来添加作为设备驱动程序的项目。

在 开始编写驱动程序之前,您应该了解设备驱动程序的用途。驱动程序将基础硬件从梁顷操作系统中抽象出来,使之更好地面对应用程序开发人员。应用程序开发人员无需
知道显示硬件或串行硬件的详细信息 — 例如,串行设备是用 Universal Asynchronous Receiver/Transmitter (UART)
实现的还是用 field-programmable gate array (FPGA)
实现的。在大多数情况下,应用程序开发人员根本不需要知道硬件是如何实现的。

Microsoft Windows 为开发人员公开了调用硬件的应用程序编程接口
(API),他们不需要知道物理硬件的情况。例如,为了向串行端口写入数据,应用程序开发人员只需调用 COMx 上的 CreateFile( )(其中 x
表示您要打开的串行端口编号,例如 COM1 代表串行端口 1),再调用 WriteFile( ) 以将一些字节数据写入串行端口,然后调用
CloseHandle( ) 以关闭串行端口。不管基础串行硬件是什么(也不管您运行的是哪个 Windows 操作系统),API 都会以同样的顺序执行。

相同的情况也适用于其他 API:如果您希望在显示表面画一条线,那么您只需调用 PolyLine( )、MoveToEx( ) 或 LineTo(
)。作为应用程序开发人员,大多数情况下您都不需要知道显示硬件的情况。此处调用的 API 将返回显示表面的维数、颜色深度等码销等。

好 消息是开发人员可以调用一个一致的、众所周知的 API 集。这些 API
将他们的应用程序从基础硬件中抽象出来。这至关重要,因为应用程序开发人员无法知道应用程序是运行在便携式计算机上,还是运行在 Tablet PC
上,抑或运行在桌面计算机上。无论电脑以 1024×768 还是 1600×1200
的分辨率运行,应用程序开发人员都可以在运行时查询屏幕分辨率和颜色深度,因此不需要构建只在特定硬件上运行的应用程序。

驱动程序只是一 个动态链接库(DLL)。将 DLL 加载到父进程地址空间;然后父进程就可以调用从该 DLL 公开的任何接口。通常,父进程通过调用
LoadLibrary( ) 或 LoadDriver( ) 来加载驱动程序。LoadDriver 不仅将 DLL 加载到父进程地址空间中,而且还要确保 DLL
没有“paged out”。

调用进程如何知道从您的 DLL 或驱动程序公开了哪些 API 或函数呢?父进程调用 GetProcAddress( ),后者可以获取函数名称和所加载的
DLL 的 hInstance。如果函数存在,调用返回该函数指针;如果没有从 DLL 公开该函数,则返回 NULL。

流驱动程序也公开了一个众所周知的函数集。对于流驱动程序,您会希望能够将字节流写入设备中,或者从设备中读取字节流。因此,在前面使用的串行端口示例中,您可能希望从您的驱动程序公开如下函数集:Open、Close、Read

Write。流驱动程序还公开一些其他函数:PowerUp、PowerDown、IOControl、Init
和 DeInit。

您可以将现有的操作系统映像用于模拟器平台(Basic Lab MyPlatform 平台最理想)。然后,您就可以将
DLL/驱动程序项目添加到该平台了。

橡模陆在构建并下载了该平台之后(这表明操作系统启动并运行良好),您需要创建您的主干驱动程序。您可以使用 File 菜单上的 Platform
Builder New Project or File 命令创建一个 Microsoft Windows CE DLL。创建用于公开函数或资源的
DLL 与创建用作驱动程序的 DLL 之间没有什么不同;唯一的不同之处在于 DLL 公开哪些函数,以及如何在平台上注册或使用 DLL。

此 外,一种创建国际化应用程序的方法是,首先创建包含一组核心语言字符串、对话框和资源的基本应用程序,然后创建许多外部
DLL,其中每个都包含针对特定区域设置的对话框、字符串和资源。然后,应用程序就可以在运行时加载相应的语言资源。只需要添加 DLL
文件,您就可以将语言添加到应用程序中。在 Developing International
Software 一书中描述了与此相关的主题以及其他一些有趣的主题,可以在 Microsoft Press 网站上获得此书。

添加一个作为设备驱动程序的项目

用 Platform Builder 打开现有的 MyPlatform 工作区。

在 File 菜单上,单击 New Project or File。

选择 WCE Dynamic-Link Library,给它一个合适的名称(例如,StreamDrv),然后单击
OK,如下图所示。

在下图所显示的页面中多少填写一些您需要的信息,然后单击 Next。

单击 A simple Windows CE DLL project,如下图所示。

单击 Finish 完成此向导。

此时,DLL 只包含一个空的 DllMain
函数。您可以公开一些应用程序要调用的函数,并公开一些资源(可能使之成为识别语言/文化的应用程序的一部分),或者使之成为一个设备驱动程序。在本文中,您将使用
Windows CE Stream Driver Wizard 创建您的主干流驱动程序。

在 Windows CE 中,打开流驱动程序就像打开文件一样,只需根据唯一的三字母前缀(例如,COM)。

为您的驱动程序选择一个唯一的三字母标识符。在 Location
框中输入您之前创建的流驱动程序的完整路径。或者使用“browse”按钮定位到 Platform Builder 安装中的 PBWorkspaces
目录,找到您前面创建的平台,然后找到流驱动程序的名称(在前面的示例中,此路径为 PBWorkspaces\TuxPlat\StreamDrv)。

在 Driver Filename 框中输入驱动程序的名称。如下图所示,使用与您前面使用名称 (StreamDrv)
相同的名称,以确保改写在 Platform Builder 中创建的原始文件。

按 Go,将生成流驱动程序源代码。

返回页首

第二部分:测试流驱动程序测试代码

现在您已经编写了用于 Windows CE 的自定义流驱动程序的基本代码。此时,驱动程序还没有与任何硬件连接。

在 编写完驱动程序之后,您需要为开发人员提供一种测试它的方法。Windows CE 附带了 Windows CE Test Kit
(CETK),它提供了用于各种驱动程序类型的驱动程序测试,包含网络连接、蓝牙、串行端口以及显示。您编写的驱动程序是一种自定义的流驱动程序,它没有
公开与现有的驱动程序测试一样的功能,因此您需要为该驱动程序编写一个自定义测试。虽然您完全可以编写一个应用程序来演练驱动程序,但提供一个 CETK
模块或许更好些,在开发期间可以使用此模块,并且还可以将此模块提供给客户,供他们在装配硬件上测试驱动程序。

在这一部分的练习中,您将执行以下过程:

创建主干 Tux 模块

将自定义驱动程序的测试代码添加到 Tux DLL 中

重新构建操作系统

设置断点

创建主干 Tux 模块

在 Platform Builder 中,在 File 菜单上单击 New Project or File。

选择 WCE TUX Dynamic-Link Library,键入 TuxTest 作为项目名称,输入一个位置,单击
Workspace Project,然后单击 OK,如下图所示。(实际上,您可以选择任意一个项目类型;对于本文,单击
Workspace Project)。

在下图显示的页面中多少填写一些您需要的信息,然后单击 Next。

阅读下图所显示的屏幕上的信息,然后单击 Next。

在最后一页上,您可以选择选取 Release Type 下的
CETK,如下图所示。该选项关闭了某些二进制的优化,以提高调试工作效率。单击 Finish。

单击 View | File View,然后展开 Projects 树显示 tux
源代码,如下图所示。

前图中需要注意的重要文件是:

ft.h — 该文件包含 tux DLL 所用的函数表。

test.cpp — 该文件包含从该函数表中调用的测试过程。

TuxStreamTest.cpp — 该文件包含 DLLMain 和 ShellProc,后者是从 Tux.exe
调用的。

将自定义驱动程序测试代码添加到 Tux DLL 中

打开源代码 Test.cpp。

使用 CodeClip 来获得 Tux_Custom_Test | TuxCode 源代码。

用 CodeClip 中的代码替代函数 TestProc 中的内容。

您会注意到,Test.cpp 中的代码加载了一个名为 Demo.dll 的驱动程序。对于本文,您创建了一个名为 StreamDrv
的驱动程序。您需要修改源代码以加载您的 StreamDrv.dll 驱动程序。

找到 Test.cpp 中调用 LoadLibrary 的源代码的位置,然后将要从 Demo.dll
中加载的驱动程序的名称修改为 StreamDrv.dll。

在 Platform Builder 文件视图中,右键单击 TuxTest 项目,然后单击 Build Current
Project。

您还需要从该目录中添加 Windows CE Test Kit 组件。

在 Device Drivers 下,找到该目录中 Windows CE Test Kit 组件的位置,然后选择
Add the Windows CE Test Kit,将该组件添加到您的平台中。

注 将该组件添加到您的平台上并没有将任何文件添加到最后的操作系统映像中;它将 Clientside 文件添加到 build release
文件夹中。您可以从 Platform Builder 下载 Clientside 应用程序,并在目标设备上运行该应用程序。

现在您需要重新构建您的操作系统,以便合并这些变更。

重新构建操作系统

在 Platform Builder 中,选择 Build OS | Sysgen。

构建过程将会花大约 5 分钟完成。

当加载驱动程序时,在流驱动程序的入口点设置一个断点来观察非常有用。

设置断点

单击 File View,打开 StreamDrv 项目,然后打开 Source files。

找到并打开 StreamDrv.cpp。

找到 DllMain,然后找到并单击 switch 语句。

按 F9 设置断点。

单击 Target | Attach,将操作系统下载到模拟环境中。

您会看到以下调试输出,断点将启用。注意,在加载操作系统的用户接口 (UI) 之前,这早就发生了。

4294780036 PID:23f767b6 TID:23f767e6 0x83fa6800: >>> Loading mole
streamdrv.dll at address 0x01ED0000-0x01ED5000

Loaded symbols for
'C:\WINCE500\PBWORKSPACES\DRVDEMO\RELDIR\EMULATOR_X86_DEBUG\STREAMDRV.DLL'

单击 switch 语句,然后按 F9 禁用断点。

按 F5,允许操作系统继续加载。

现在,您已经构建了一个 Windows CE 5.0
操作系统,它包含一个自定义流驱动程序,并且您已经在操作系统引导顺序的过程中看到了驱动程序加载。

返回页首

第三部分:检验驱动程序

在这一部分的练习中,您将执行以下过程:

使用命令行工具查看从驱动程序公开的函数

使用远程系统信息 (Remote System Information) 工具检验驱动程序

确定驱动程序已加载

检验您所创建的设备驱动程序的第一种方法是查看从该驱动程序公开的函数。Windows CE 附带了一个名为 Dumpbin
的命令行工具,可以用于检验导入应用程序或模块的内容,或者从 DLL(或驱动程序)导出的内容。

使用命令行工具查看从驱动程序公开的函数

在 Platform Builder 中,单击 Build OS | Open Release
Directory。该操作为当前的工作区打开 build release 文件夹中的 Command Prompt 窗口。

键入 mpbin exports StreamDrv.dll

下图显示输出。您可以看到,所有需要的流驱动程序函数都是从驱动程序公开的;函数是从 DLL 公开的(通过该项目的 .def 文件)。

键入 Exit 关闭 Command Prompt 窗口

StreamDrv.def 文件的内容如下所示。

LIBRARY DemoDriver

EXPORTS

DEM_Init

DEM_Deinit

DEM_Open

DEM_Close

DEM_IOControl

DEM_PowerUp

DEM_PowerDown

DEM_Read

DEM_Write

DEM_Seek

CustomFunction

CustomFunctionEx

您可以检验驱动程序的第二种方法是通过远程系统信息工具。

通过远程系统信息工具检验驱动程序

在 Platform Builder 中,单击 Tools | Remote System
Information。

选择 Windows CE Default Platform | Default Device,然后单击
OK,如下图所示。

此过程将远程系统信息应用程序连接到 Platform Builder 正在使用的当前活动平台上。下图显示了结果。

您也可以使用加载模块列表来确定已加载了您的驱动程序。

确定驱动程序已加载

在 Platform Builder 中,使用 Target Control 窗口 (gi mod) 或 View |
Debug Windows | Moles and Symbols。

下图显示了此过程的结果。

返回页首

第四部分:使用 Windows CE Test Kit

Windows CE Test Kit 包含设备端组件和桌面组件。设备端组件叫做 Clientside.exe,通过从目录中添加 CETK
组件,您可以将设备端组件添加到您的工作区中。注意,将 Clientside.exe
应用程序添加到工作区中并没有将任何文件添加到最终操作系统映像中,但它却将应用程序复制到 build release 文件夹中。

在桌面计算机上运行 CETK 之前,您需要启动设备上的 Clientside.exe 应用程序。没有链接工具(比如远程工具)的原因在于,CETK
也将运行在装配(零售)设备(比如 Pocket PC)上。

在这一部分的练习中,您将执行以下过程:

检验 Windows CE Test Kit 用户接口

运行一个标准测试

检验 Windows CE Test Kit 用户接口

在 Platform Builder 中,在 Tools 菜单上单击 Windows CE Test
Kit。

这 一步启动 Windows CE Test Kit 应用程序,如下图所示。注意,这不是一个标准的远程工具。Windows CE
附带的大多数远程工具都使用 Kernel Independent Transport Layer
(KITL),一种将工具从基础通信硬件中抽象出来的传输,以便这些工具可以运行在以太网、串行端口、1394、USB 或者其他传输上。

虽然对于 Windows CE 5.0,Windows CE Test Kit 通常通过套接字连接,但是也已经更新了工具来支持 KITL。

在 Windows CE Test Kit 中,单击 Connection | Start
Client。

这一步显示 Device Connection 对话框,其中您可以选择是通过套接字连接还是通过 KITL 连接。

确保清除了 Use Windows Sockets for the client/server communication
复选框,如下图所示。

单击 Connect。

在远程工具 (KITL) 的标准用户界面中,选择 Windows CE Default Platform | Default
Device,然后单击 OK,如下图所示。

该过程在目标设备上启动 Clientside.exe,并连接到目标设备上。在完成连接之后,CETK 枚举目标平台上支持的设备,并禁用 CETK
中不支持的设备。

在 CETK 连接到目标设备并枚举设备之后,UI 如下图所示。注意,禁用了某些硬件类别,比如 Bluetooth、IR
Port 和 Modem。

将自定义测试添加到 CETK 中之前,您可以运行一个标准测试,以查看测试工作如何进行。

运行标准测试

在 CETK 中,展开 Windows CE (x86)。

找到并展开 Serial Port。

右键单击 Serial Port Driver Test,然后单击 Quick Start。

这一步只运行了这一个测试,还没有运行所选的其他测试。UI 指示测试正在进行,如下图所示。

CETK 提供测试过程和测试输出的更新。您也可以在 Platform Builder 中检验调试输出,以便查看测试过程,如下例所示。

405910 PID:83d4ee4a TID:83ea5a8a *** Test Name: Set event mask and wait for
thread to close comm port handle

405920 PID:83d4ee4a TID:83ea5a8a *** Test ID: 1007

405920 PID:83d4ee4a TID:83ea5a8a *** Library Path: \serdrvbvt.dll

405920 PID:83d4ee4a TID:83ea5a8a *** Command Line:

405920 PID:83d4ee4a TID:83ea5a8a *** Result: Passed

405920 PID:83d4ee4a TID:83ea5a8a *** Random Seed: 15595

405930 PID:83d4ee4a TID:83ea5a8a *** Thread Count: 1

405930 PID:83d4ee4a TID:83ea5a8a *** Execution Time: 0:00:05.110

405930 PID:83d4ee4a TID:83ea5a8a ***
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

如果 CETK UI
指示模拟器上的串行端口测试已经失败(如下图所示),那么失败可能不是由于每个测试的完全失败而导致的。它可能表明,全部测试套件只有一部分已经失败,并且这部分实际上也是期望的行为。

右键单击 Serial Port Driver Test [Failed],然后单击 View
Results。

出现如下图所示的窗口。

查看上图所示的结果,您可以看到,已经运行了 10 个单独的测试。除了 Set and verify receive timeout
以外,所有这些测试都已经通过。

要获得更多信息,您可以单击个别测试。

返回页首

第五部分:创建自定义 CETK 测试

通过使用 Platform Builder User-Defined Test Wizard,您可以创建一个自定义 CETK
测试。该测试将验证自定义流驱动程序(您也已经将其添加到平台中)的导出函数。

在这一部分的练习中,您将执行以下过程:

列出 CETK 中的自定义流驱动程序测试

运行自定义流驱动程序测试

列出 CETK 中的自定义流驱动程序测试

在 CETK 中,单击 Tests | User Defined。

这一步启动 User-Defined Test Wizard。该向导的第一页只是一些信息。

单击 Next,如下图所示。

单击 Add a New Test,然后单击 Next,如下图所示。

输入下列信息,然后单击 Next:

· 在 Name of Test 框中键入 Custom Stream Driver Test

· 在 Tux Mole (DLL) 框中,定位到
C:\Wince500\PBWorkspaces\MyPlatform\RelDir\Emulator_x86_Debug 目录,然后选择
test.dll 或 TuxTest.dll(这依赖于您在 Platform Builder 中所使用的 Tux
测试的名称)。

· 在 Command Line 框中,保留当前测试的默认设置。

· 在 Processor 框中键入 x86

下图显示信息如何出现在当前的向导页中。

单击 Copy the files to the directory for user-defined tests,然后单击
Next,如下图所示。

您需要将自定义驱动程序测试(您的 DLL)复制到用户定义的测试文件夹中。如果您要删除现有的工作区,那么自定义驱动程序测试仍然保持完好。

单击 Next,如下图所示。

单击 Finish,如下图所示。

CETK 应用程序不会用新的测试进行自动刷新。您需要重新同步桌面应用程序,以查看新添加的测试。

右键单击 Windows CE (x86),然后单击 Redetect Peripherals。

该过程添加了一个名为 User Tests 的新驱动程序类别。您只添加了一个测试,因此,当您展开这个项目时,您只能看到 Custom
Stream Driver Test。

注 已经将自定义流驱动程序测试的 DLL 复制到下列位置: C:\Program Files\Windows CE Platform
Builder\5.00\CEPB\wcetk\user\x86.

运行自定义流驱动程序测试

在可用的测试列表中展开 User Tests。

右键单击 Custom Stream Driver Test,然后单击 Quick Start。

⑤ 根据测试效应,哪一种方式的测试最好

根据测试效应,哪一种方式的测试最好,1.测试驱动开发(Test-Driven Development)
测试驱动开发不同于传统测试开发,编写某个功能的代码之前先编写这个功能的测试代码,然后再编写使测试通过的代码功能。

通过测试来推动开发。

测试驱动开发帮助了代码简洁且可用,也是在软件开发中主流的测试方法。

2.单元测试(Unit Test)
单元测试也叫模块测试,是针对程察明伍序模块来进行测试的代码模块。

测试驱动开发中编写的测试代码就是单元测试。

所以,测试驱动开发中单元测试占很大一部分。

不过这也根据团队中对测试部分的指标决定,这个指标就是代码覆盖率。

3.代码覆盖(Code Coverage)
代码覆盖是软件测试中的的一种度量,描述程序中败或源代码的测试比例。

一般来讲,这个要根据不同的任务和不同的团队指标来定,像 80% 或更多。

4.集成测试(Integeration Test)
集成测试也叫组装测试。

在单元测试的基础上,将能运行的模块代码,按照设计要求组装成系统,进行集成测试。

5. 端到端的测试(End to End Test)
端到端的测试是从应用程序流的角度进行测槐斗试,模拟用户真实使用场景,也可以称作自动化测试。

例如,用 puppeteer 模拟真实用户,来测试网页开发。

以上都是一些名词的简单介绍,后面会介绍它们之间的关系。

⑥ 如何编写驱动程序

代码:

#include<linux/mole.h>

#include<linux/kernel.h>

#include<asm/io.h>

#include<linux/miscdevice.h>

#include<linux/fs.h>

#include<asm/uaccess.h>

//流水灯代码

#define GPM4CON 0x110002e0

#define GPM4DAT 0x110002e4

static unsigned long*ledcon=NULL;

static unsigned long*leddat=NULL;

//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)

static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)

{

int value=0;

int ret=0;

ret=_from_user(&value,buff,4);

//底层驱动只定义基本操作动作,不定义功能

if(value==1)

{

*leddat|=0x0f;

*leddat&=0xfe;

}

if(value==2)

{

*leddat|=0x0f;

*leddat&=0xfd;

}

if(value==3)

{

*leddat|=0x0f;

*leddat&=0xfb;

}

if(value==4)

{

*leddat|=0x0f;

*leddat&=0xf7;

}

return 0;

}

//文件操作结构体初始化

static struct file_operations g_tfops={

.owner=THIS_MODULE,

.write=test_write,

};

//杂设备信息结构体初始化

static struct miscdevice g_tmisc={

.minor=MISC_DYNAMIC_MINOR,

.name="test_led",

.fops=&g_tfops,

};

//驱动入口函数杂设备初始化

static int __init test_misc_init(void)

{

//IO地址空间映射到内核的虚拟地址空间

ledcon=ioremap(GPM4CON,4);

leddat=ioremap(GPM4DAT,4);

//初始化led

*ledcon&=0xffff0000;

*ledcon|=0x00001111;

*leddat|=0x0f;

//杂设备注册函数

misc_register(&g_tmisc);

return 0;

}

//驱动出口函数

static void __exit test_misc_exit(void)

{

//释放地址映射

iounmap(ledcon);

iounmap(leddat);

}

//指定模块的出入口函数

mole_init(test_misc_init);

mole_exit(test_misc_exit);

MODULE_LICENSE("GPL");

(6)驱动测试程序的开发套路扩展阅读:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include<文件名>

2、#include"文件名"

如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:

#include<math.h>//一些数学函数的原型,以及相关的类型和宏

如果需要包含针对程序所开发的源文件,则应该使用第二种格式。

采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:

#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏

你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。

【例1】在#include命令中的宏

#ifdef _DEBUG_

#define MY_HEADER"myProject_dbg.h"

#else

#define MY_HEADER"myProject.h"

#endif

#include MY_HEADER

当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。

⑦ 验收测试驱动开发介绍(ATDD)

TDD(测试驱动开发)是敏捷中非常有名的一个实践了,谈这个的人很多,但真正在用的人只是凤毛麟角。TDD一般主要指的是UTDD,但除了UTDD之外还经常被提起的还有ATDD和BDD,本文希望呈现的是ATDD,即是 验收测试驱动开发 。本文的读者,我默认你已戚租岁经了解了UTDD的概念和大致方法。

最好的验证一个研发团队是否对客户需求有统一的理解的方法就是对客户如何验收有统一的理解。
ATDD这样的做法一下子就让我想到了“七个习惯”中的 以终为始 ,我们先澄清细化最终客户的目标,并把自始至终都基于这个目标工作,这不就是以终为始吗?

一般来说,我们认为ATDD的好处有:

为了更好的把ATDD和UTDD区分开来,你可以尝试记住一句话:

一个列子:

Robot framework是一个开源的自动化测试框架,它通过“keyword-driven” 的方式编写测试案例,是一个非常适合用来实践ATDD的工具。
官网: Robot Framework

基于抛开了软件系统复杂性的user story而写的验收用例,往往也高睁不可避免在测试覆盖率上会遗漏一些细节上的需求,特别是非功能性的需求。没有人工参与的自动化测试,提高了效率,但也不可避免的阻碍了测试案例的改进,使得杀虫剂效应明显。
所以在引入ATDD和CI/CD后,组织必须也要同时引入 探索性测试 ,不断完善自动化测试的不足。
当然探索式测试也可以是自动化的,型弯关于探索式测试,以后再谈。

⑧ 电脑驱动程序的工作原理

资料来源: http://ke..com/view/1048.htm一、什么是驱动程序
根据网络:驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”, 是一种可以使计算机和设备通信的特殊程序,可以 说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。
刚安装好的系统操作系统,很可能驱动程序安装得不完整。硬件越新,这种可能性越大。菜菜熊之前看到的“图标很大且颜色难看”就是没有安装好驱动的原因。
在软件测试中:在自底向上测试中,要编写称为测试驱动的模块调用正在测试的模块。测试驱动模块以和将来真正模块同样的方式挂接,向处于测试的模块发送测试用例数据,接受返回结果,验证结果是否正确。
二、驱动程序的作用
随着电子技术的飞速发展,电脑硬件的性能越来越强大。驱动程序是直接工作在各种硬件设备上的软件,其“驱动”这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。
硬件如果缺少了驱动程序的“驱动”,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武 之地。这时候,电脑就正如古人所说的“万事俱备,只欠东风”,这“东风”的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的 作用。
从理论上讲,所有的硬件设备都需要安装相应的驱动程序才能正常工作。但像CPU、内存、主板、软驱、键盘、显示器等设备却旦枝并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢?
这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就 可以被BIOS和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等 却必须要安装驱动程序,不然这些硬件就无法正常工作。
三、驱动程序的界定
驱动程序可以界定为官方正式版、微软WHQL认证版、第三方驱动、发烧友修改版、Beta测试版。
1、官方正式版
官方正式版驱动是指按照芯片厂商的设计研发出来的,经过反复测试、修正,最终通过官方渠道发布出来的正式版驱动程序,又名公版驱动。通常官方正 式版的发布方式包括官方网站发布及硬件产品附带光盘这两种方式。稳定性、兼容性好是官方正式版驱动最大的亮点,同时也是区别于发烧友修改版与测试版的显著 特征。因此推荐普通用户使用官方正式版,而喜欢尝鲜、体现个性的玩家则推荐使用发烧友修改版及Beta测试版。
2、微软WHQL认证版
WHQL是Windows Hardware Quality Labs的缩写,是微软对桐好各硬件厂商驱动的一个认证,是为了测试驱动程序与操作系统的相容性及稳定性而制定的。也就是说通过了WHQL认证的驱动程序与Windows系统基本上不存在兼容性的问题。
3、第三方驱动
第三方驱动一般是指硬件产品OEM厂商发布的基于官方驱动优化而成的驱动程序。第三方驱动拥有稳定性、兼容性好,基于官方正式版驱动优化并比官 方正式版拥有更加完善的功能和更加强劲的整体性能的特性。因此,对于品牌机用户来说,笔者推荐用户的首选驱动是第三方驱动,第二选才是官方正式版驱动;对 于组装机用户来说,第三方驱动的选择可能相对复杂一点,因此官方正式版驱动仍是首选。
4、发烧友修改版
发烧友令笔者首先就联想到了显卡,这是为什么呢?因为一直以来,发烧友很常都被用来形容游戏爱好者。笔者的这个想法也正好和发烧友修改版的诞生 典故相符的,因为发烧友局迟铅修改版的驱动最先就是出现在显卡驱动上的,由于众多发烧友对游戏的狂热,对于显卡性能的期望也就是比较高的,这时候厂商所发布的显 卡驱动就往往都不能满足游戏爱好者的需求了,因此经修改过的以满足游戏爱好者更多的功能性要求的显卡驱动也就应运而生了。如今,发烧友修改版驱动又名改版 驱动,是指经修改过的驱动程序,而又不专指经修改过的驱动程序。
5、Beta测试版
测试版驱动是指处于测试阶段,还没有正式发布的驱动程序。这样的驱动往往具有稳定性不够、与系统的兼容性不够等bug。尝鲜和风险总是同时存在的,所以对于使用Beta测试版驱动的用户要做好出现故障的心理准备。
四、驱动程序介绍
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱、键盘、鼠标等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。
驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia 显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当你安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于你电脑中的硬件设备时,系统就会要求你安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。
当你在安装新硬件时总会被要求放入“这种硬件的驱动程序”,很多人这时就开始头痛。不是找不到驱动程序的盘片,就是找不到文件的位置,或是根本不知道什么是驱动程序。比如安装打印机这类的硬件外设,并不是把连接线接上就算完成,如果你这时候开始使用,系统会告诉你,找不到驱动程序。怎么办呢?参照说明书也未必就能顺利安装。其实在安装方面还是有一定的惯例与通则可寻的,这些都可以帮你做到无障碍安装。
在Windows系统中,需要安装主板、光驱、显卡、声卡等一套完整的驱动程序。如果你需要外接别的硬件设备,则还要安装相应的驱动程序,如:外接游戏硬件要安装手柄、方向盘、摇杆、跳舞毯等的驱动程序,外接打印机要安装打印机驱动程序,上网或接入局域网要安装网卡、Moden甚至ISDN、ADSL的驱动程序。说了这么多的驱动程序,你是否有一点头痛了。下面就介绍Windows系统中各种的不同硬件设备的驱动程序,希望能让你拨云见日。
在Windows 9x下,驱动程序按照其提供的硬件支持可以分为:声卡驱动程序、显卡驱动程序、鼠标驱动程序、主板驱动程序、网络设备驱动程序、打印机驱动程序、扫描仪驱动程序等等。为什么没有CPU、内存驱动程序呢?因为CPU和内存无需驱动程序便可使用,不仅如此,绝大多数键盘、鼠标、硬盘、软驱、显示器和主板上的标准设备都可以用Windows自带的标准驱动程序来驱动,当然其它特定功能除外。如果你需要在Windows系统中的DOS模式下使用光驱,那么还需要在DOS模式下安装光驱驱动程序。多数显卡、声卡、网卡等内置扩展卡和打印机、扫描仪、外置Modem等外设都需要安装与设备型号相符的驱动程序,否则无法发挥其部分或全部功能。驱动程序一般可通过三种途径得到,一是购买的硬件附带有驱动程序;二是Windows系统自带有大量驱动程序;三是从Internet下载驱动程序。最后一种途径往往能够得到最新的驱动程序。
供Windows 9x使用的驱动程序包通常由一些.vxd(或.386)、.drv、.sys、.dll或.exe等文件组成,在安装过程中,大部分文件都会被拷贝到“Windows\ System”目录下。
五、驱动程序的开发
驱动程序的开发工作是很具挑战性的,因为必须配合著硬件与软件上相当明确与高级的平台技术。由于大多数的驱动程序(device drivers)运行在内核模式(kernel mode),软件的错误经常造成系统严重的不稳定,例如蓝屏(blue screen),这跟过去的用户模式(user mode)下的程序设计(例如Delphi、VB、Java)有明显的差异性。
Windows平台
为了大量减轻驱动程序开发人员的负担,微软不断的改进驱动程序的开发软件与架构,从早期复杂深晦的VxD,到Windows XP上的Windows Driver Model(以下简称WDM)开发架构,如今Windows Driver Foundation(以下简称WDF)已成为新一代的Windows平台驱动程序发展架构,这个架构大量简化了驱动程序的开发流程,更符合面向对象的精神,此架构包含了UserMode Driver Framework 与 Kernel Mode DriverFramework两种开发模式。在开发Windows平台上的驱动程序之前,必须先安装DDK包,目前DDK最新版本为5600,同时支持WDM与WDF两种架构。
Linux平台
Linux作为UNIX的一个变种,继承了UNIX的设备管理方法,将所有的设备是具体的文件,通过文件系统层对设备进行访问。 这种设备管理方法可以很好地做到“设备无关性”,可以根据硬件外设的更新进行方便的扩展。
Linux中的设备大致可以分为三类:字符设备,块设备,网络设备。
字符设备没有缓冲区,以字节为单位顺序处理数据,不支持随机读写。常见的字符设备如普通打印机、系统的串口、终端显示器、嵌入式设备中的简单按键、手写板等。
块设备是指在输入输出时数据处理以块为单位的设备,一般都采用缓冲技术,支持数据的随机读写。典型的块设备有硬盘、光驱等。
字符设备和块设备面向的上一层是文件系统层。对用户来说,块设备和字符设备的访问接口都是一组基于文件的系统调用,如read, write等。
网络设备与块设备和字符设备不同,网络设备面向的上一层是网络协议层。设备文件是一个唯一的名字(如eth0),在文件系统中不存在对应的节点项。内核和网络驱动程序之间的通信使用的是一套和数据包传输相关的函数,而不是read, write等。
每一个设备都有一对主设备号、次设备号的参数作为唯一的标识。主设备号标识设备对应的驱动程序;次设备号用来区分具体驱动程序的实例。主设备号的获取可以通过动态分配或指定的方式。在嵌入式系统中外设较少,一般采用指定的方式。
n [编辑本段]驱动程序的一般安装顺序驱动程序安装的一般顺序:主板芯片组(Chipset)→显卡(VGA)→声卡(Audio)→网卡(LAN)→无线网卡(Wireless LAN)→红外线(IR)→触控板(Touchpad)→PCMCIA控制器(PCMCIA)→读卡器(Flash Media Reader)→调制解调器(Modem)→其它(如电视卡、CDMA上网适配器等等)。不按顺序安装很有可能导致某些软件安装失败。
第一步,安装操作系统后,首先应该装上操作系统的Service Pack(SP)补丁。我们知道驱动程序直接面对的是操作系统与硬件,所以首先应该用SP补丁解决了操作系统的兼容性问题,这样才能尽量确保操作系统和驱动程序的无缝结合。
第二步,安装主板驱动。主板驱动主要用来开启主板芯片组内置功能及特性,主板驱动里一般是主板识别和管理硬盘的IDE驱动程序或补丁,比如Intel芯片组的INF驱动和VIA的4in1补丁等。如果还包含有AGP补丁的话,一定要先安装完IDE驱动再安装AGP补丁,这一步很重要,也是很多造成系统不稳定的直接原因。
第三步,安装DirectX驱动。这里一般推荐安装最新版本,目前DirectX的最新版本是DirectX 9.0C。可能有些用户会认为:“我的显卡并不支持DirectX 9,没有必要安装DirectX 9.0C”,其实这是个错误的认识,把DirectX等同为了Direct3D。DirectX是微软嵌在操作系统上的应用程序接口(API),DirectX由显示部分、声音部分、输入部分和网络部分四大部分组成,显示部分又分为Direct Draw(负责2D加速)和Direct 3D(负责3D加速),所以说Direct3D只是它其中的一小部分而已。而新版本的DirectX改善的不仅仅是显示部分,其声音部分(DirectSound)——带来更好的声效;输入部分(Direct Input)——支持更多的游戏输入设备,并对这些设备的识别与驱动上更加细致,充分发挥设备的最佳状态和全部功能;网络部分(DirectPlay)——增强计算机的网络连接,提供更多的连接方式。只不过是DirectX在显示部分的改进比较大,也更引人关注,才忽略了其他部分的功劳,所以安装新版本的DirectX的意义并不仅是在显示部分了。当然,有兼容性问题时另当别论。
第四步,这时再安装显卡、声卡、网卡、调制解调器等插在主板上的板卡类驱动。
第五步,最后就可以装打印机、扫描仪、读写机这些外设驱动。
这样的安装顺序就能使系统文件合理搭配,协同工作,充分发挥系统的整体性能。
另外,显示器、键盘和鼠标等设备也是有专门的驱动程序,特别是一些品牌比较好的产品。虽然不用安装它们也可以被系统正确识别并使用,但是安装上这些驱动程序后,能增加一些额外的功能并提高稳定性和性能 [编辑本段]Windows中的inf文件Windows怎样知道安装的是什么设备,以及要拷贝哪些文件呢?答案在于.inf文件。.inf是从Windows 95时代开始引入的一种描述设备安装信息的文件,它用特定语法的文字来说明要安装的设备类型、生产厂商、型号、要拷贝的文件、拷贝到的目标路径,以及要添加到注册表中的信息。通过读取和解释这些文字,Windows便知道应该如何安装驱动程序。目前几乎所有硬件厂商提供的用于Windows 9x下的驱动程序都带有安装信息文件。事实上,.inf文件不仅可用于安装驱动程序,还能用来安装与硬件并没有什么关系的软件,例如Windows 98支持“Windows更新”功能,更新时下载的系统部件就是利用.inf文件来说明如何安装该部件的。
在安装驱动程序时,Windows一般要把.inf文件拷贝一份到“Win-dows\Inf”或“Windows\Inf\Other”目录下,以备将来使用。Inf目录下除了有.inf文件外,还有两个特殊文件Drvdata.bin和Drvidx.bin,以及一些.pnf文件,它们都是Windows为了加快处理速度而自动生成的二进制文件。Drvdata.bin和Drvidx.bin记录了.inf文件描述的所有硬件设备,也许朋友们会有印象:当我们在安装某些设备时,经常会看到一个“创建驱动程序信息库”的窗口,此时Windows便正在生成这两个二进制文件。
Windows 9x专门提供有“添加新硬件向导”(以下简称硬件向导)来帮助使用者安装硬件驱动程序,使用者的工作就是在必要时告诉硬件向导在哪儿可以找到与硬件型号相匹配的.inf文件,剩下的绝大部分安装工作都将由硬件安装向导自己完成。
给硬件设备安装驱动程序对Windows 9x用户来说并不是一件陌生事,在安装或重装Windows时需要安装驱动程序,在购买了某些新硬件之后也需要安装驱动程序。如果驱动程序安装不正确,系统中某些硬件就可能无法正常使用。虽然Windows 9x支持即插即用,能够为用户减轻不少工作,但由于PC机的设备有非常多的品牌和型号,加上各种新产品不断问世,Windows不可能自动识别出所有设备,因此在安装很多设备时都需要人工干预。 资料来源: http://ke..com/view/1048.htm

⑨ 什么是测试驱动开发

测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
2基本原理
测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
测试驱动开发的基本过程如下:
①快速新增一个测试
②运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
③做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
④运行所有的测试,并且全部通过
⑤重构代码,以消除重复设计,优化设计结构
简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。
本质和优势
或许只有了解了测试驱动开发的本质和优势之后,你才会领略到她的无穷魅力。 测试驱动开发不是一种测试技术,它是一种分析技术、设计技术,更是一种组织所有开发活动的技术。相对于传统帆告的结构化开发过程方法,它具有以下优势:[3]
1) TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化。
2) 出于易测试和测试独立性的要求,将促使我们实现松耦合的设计慧孙,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。而且TDD明显地缩短了设计决策的反馈循环,使我们几秒或几分钟之内就能获得反馈。
3) 将测试工作提到编码之前,并频繁地运行所有测试,可以态碧明尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量。
4) TDD提供了持续的回归测试,使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此我们就不需要担心会产生什么不可预知的副作用了。
5) TDD所产生的单元测试代码就是最完美的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。
6) TDD可以减轻压力、降低忧虑、提高我们对代码的信心、使我们拥有重构的勇气,这些都是快乐工作的重要前提。
7)快速的提高了开发效率。
现状和前景
测试驱动开发的技术已得到越来越广泛的重视,但由于发展时间不长,相关应用并不是很成熟。现今越来越多的公司都在尝试实践测试驱动开发,但由于测试驱动开发对开发人员要求比较高,更与开发人员的传统思维习惯相违背,因此实践起来有一定困难。 美国不少著名软件公司如IBM很早就开始向敏捷转型,在此过程中,TDD通常是最重要也最艰难的一个,正如IBM开发转型部门副总裁Sue Mckinney所言:测试驱动开发前景非常诱人,但是“在这个过程中我们的付出可能也是最多的。”Forrester的高级分析师Dave West认为,测试驱动开发(TDD)就像是“圣杯”,但是“如果能达到这个目标,付出再多的辛苦也是值得的。”
我想,测试驱动开发的推广过程中,首要的问题是将开发人员长期以来形成的思维观念和意识形态转变过来,开发人员只喜欢编码,不喜欢测试,更无法理解为什么没有产品代码的时候就先写单元测试;其次是相关的技术支持,测试驱动开发对开发人员提出了更高的要求,不仅要掌握测试和重构,还要懂得设计模式等设计方面的知识。
正像每种革命性的产物刚刚产生之初所必然要经历的艰难历程,测试驱动开发也正在经历着,但她正在逐渐走向成熟,前途一片光明。相信未来几年内,国内的一定会越来越多的软件企业开始普及测试驱动开发。

⑩ 驱动程序开发步骤

驱动程序开发步骤

薯绝橘编写一个驱动程序的大致流程如下:

1)查看原理图,数据手册,了解设备的操作方法;

2)在内核中找到相近的驱动程序,作为模板来开发,有时要从零开始;

3)实现驱动程序的初始化,比如详内核注册宏盯这个驱动程序,

4)设计所要实现的操作:比如open、close、read、writ等函数;

5)实现中断服务,并不是每个设备数团驱动都必须的;

6)编译驱动到内核,或作为模块动态加载

7)测试驱动

阅读全文

与驱动测试程序的开发套路相关的资料

热点内容
铁路12306密码找不回 浏览:352
默认网络覆盖的脑区 浏览:319
itunes恢复iphone教程 浏览:292
炉石现在是什么版本 浏览:825
word兼容包安装报错 浏览:528
iphone5s包装4g没有气孔 浏览:814
html包含文件代码吗 浏览:50
苹果appstore日本账号 浏览:532
解密dg加密的文件 浏览:206
gsh6什么格式文件 浏览:507
dnf85版本觉醒任务 浏览:998
范冰冰苹果百度云盘资源链接 浏览:507
数据库主机是什么系统 浏览:812
pdf表单教程 浏览:715
百度浏览器去更新安卓破解版 浏览:855
光盘内部应用程序错误 浏览:83
iphone6升级ios9步骤 浏览:873
魔力代码 浏览:497
win10打开局域网文件夹很卡 浏览:986
app收益怎么分 浏览:812

友情链接