4.虚拟仪器驱动程序.txt
来自「虚拟仪器软件的介绍」· 文本 代码 · 共 1,017 行 · 第 1/5 页
TXT
1,017 行
viPoke16(vi,(ViAddr)((ViUInt8 *)address+card_stat),bank_2);
/* 设置握手模式 */
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_hand_0),
handshake_mode_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_hand_1),
handshake_mode_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_hand_2),
handshake_mode_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_hand_3),
handshake_mode_reg);
/* 设置延时值 */
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_del_0),
handshake_delay_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_del_1),
handshake_delay_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_del_2),
handshake_delay_reg);
viPoke8(vi,(ViAddr)((ViUInt8*)address+port_del_3),
handshake_delay_reg);
/* 取消内存映射 */
errStatus = viUnmapAddress(vi);
if (errStatus < VI_SUCCESS)
{
return errStatus;
}
return VI_SUCCESS;
}
第五步是将设计的源代码进行封装,并在VC环境下开一个新的动态链接库工程(
Win32 Dynamic-Link Library),包括源代码.c文件,头文件.h文件以及引出描述
文件.def文件,并链入visa32.lib,编译生成动态链接库.dll文件,一般情况下,
DLL文件一般命名为prefix_32.dll。
第六步是设计功能面板文件中各功能函数的功能面板窗,以图形化的形式给出各功
能函数的输入/输出参数及返回状态值,并描述出相应的帮助信息。功能面板文件
的开发工具一般可以用NI公司的LabWindows/CVI,它提供了集成化的设计环境,操
作简单而又正确。功能面板文件一般命名为prefix.fp。
第七步是进行仪器驱动程序的测试。仪器驱动程序具有明显的模块性,且测试必须
深入到内部源代码中,可采用“白盒“测试方法中的单元测试。
所谓单元测试,是对软件中的基本组成单位进行测试,如一个模块、一个过程,它
是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本
组成单位的正确性,一个软件单元的正确性是相对于该单位的规约而言的,因此,
单元测试以被测试单位的规约为基准,一般的方法有控制流测试、数据流测试、排
错测试与分域测试等多种。在测试仪器驱动程序时,发现驱动程序本身并不是一个
应用程序,并不具有明显的数据流向与控制流向,因此采用控制流测试与数据流测
试并不有效,而应将测试重点放在返回错误查询上。基本方法是在每一个功能函数
的编写过程中,在每一个操作命令函数调用之后,均带有错误返回检查,并可以带
有多个错误值。利用测试程序在进行功能函数测试时,根据返回状态值的不同,可
以得知错误原因。分析返回的错误原因与实际情况,如果情况符合,则原功能函数
正确,否则功能函数出现错误。在测试过程中,测试数据的选择是至关重要的,最
普遍的情况是输入参数一旦越界,程序是否会出错,在测试过程中,选择的测试数
据往往采用边界值,主要考虑错误发生在边界的情况居多。
在实际测试过程中,往往分两个步骤进行。第一个步骤是在VC环境下新建一个对应
仪器驱动程序的测试工程,生成可执行程序。在这个测试过程中,主要是采用标准
输入/输出方式进行交互,主要是对软件本身进行测试。第二个步骤是利用下一章
介绍的虚拟仪器软面板,以图形化界面方式对仪器驱动程序进行调用测试,同时也
是对虚拟仪器硬件模块本身的测试。
以上的仪器驱动程序设计步骤是指结合实例开发得出的一般步骤,可以用以指导各
个仪器驱动程序的开发过程。但在实际过程中,必须灵活运用,方可以事半功倍。
附录4.1 vpptype.h文件
/*----------------------------------------------------------------------
-----*/
/* 由VXI总线即插即用系统联盟提供 */
/* VXI总线即插即用仪器驱动程序头文件名 */
/*----------------------------------------------------------------------
-----*/
#ifndef __VPPTYPE_HEADER__
#define __VPPTYPE_HEADER__
#include "visatype.h"
/*- 错误代码 ----------------------------------------------*/
#define VI_WARN_NSUP_ID_QUERY (0x3FFC0101L)
#define VI_WARN_NSUP_RESET (0x3FFC0102L)
#define VI_WARN_NSUP_SELF_TEST (0x3FFC0103L)
#define VI_WARN_NSUP_ERROR_QUERY (0x3FFC0104L)
#define VI_WARN_NSUP_REV_QUERY (0x3FFC0105L)
#define VI_ERROR_PARAMETER1 (_VI_ERROR+0x3FFC0001L)
#define VI_ERROR_PARAMETER2 (_VI_ERROR+0x3FFC0002L)
#define VI_ERROR_PARAMETER3 (_VI_ERROR+0x3FFC0003L)
#define VI_ERROR_PARAMETER4 (_VI_ERROR+0x3FFC0004L)
#define VI_ERROR_PARAMETER5 (_VI_ERROR+0x3FFC0005L)
#define VI_ERROR_PARAMETER6 (_VI_ERROR+0x3FFC0006L)
#define VI_ERROR_PARAMETER7 (_VI_ERROR+0x3FFC0007L)
#define VI_ERROR_PARAMETER8 (_VI_ERROR+0x3FFC0008L)
#define VI_ERROR_FAIL_ID_QUERY (_VI_ERROR+0x3FFC0011L)
#define VI_ERROR_INV_RESPONSE (_VI_ERROR+0x3FFC0012L)
/*- 其它定义 --------------------------------------------------*/
#define VI_ON (1)
#define VI_OFF (0)
#endif /*结束*/
附录4.2 VXI可编程数字输入/输出模块驱动程序头文件zde1458.h文件
/* VXIplug&play Instrument Driver for the zde1458A */
#ifndef zde1458_INCLUDE
#define zde1458_INCLUDE
#include "vpptype.h"
#if defined(__cplusplus) || defined(__cplusplus__)
extern "C" {
#endif
/* Common Error numbers start at BFFC0D00 */
/* Error Value Defination */
#define zde1458_INSTR_ERROR_NOT_VXI (_VI_ERROR+0x3FFC0D00L) /*
0xBFFC0D00 */
/* D01 unused*/
#define zde1458_INSTR_ERROR_NULL_PTR (_VI_ERROR+0x3FFC0D02L) /*
0xBFFC0D02 */
#define zde1458_INSTR_ERROR_RESET_FAILED (_VI_ERROR+0x3FFC0D03L) /*
0xBFFC0D03 */
#define zde1458_INSTR_ERROR_UNEXPECTED (_VI_ERROR+0x3FFC0D04L) /*
0xBFFC0D04 */
#define zde1458_INSTR_ERROR_INV_SESSION (_VI_ERROR+0x3FFC0D05L) /*
0xBFFC0D05 */
#define zde1458_INSTR_ERROR_LOOKUP (_VI_ERROR+0x3FFC0D06L) /*
0xBFFC0D06 */
#define zde1458_INSTR_ERROR_DETECTED (_VI_ERROR+0x3FFC0D07L) /*
0xBFFC0D07 */
/* Parameter errors not in VPP 3.4 */
#define zde1458_INSTR_ERROR_PARAMETER9 (_VI_ERROR+0x3FFC0D20L)/*
0xBFFC0D20 */
#define zde1458_INSTR_ERROR_PARAMETER10 (_VI_ERROR+0x3FFC0D21L)/*
0xBFFC0D21 */
#define zde1458_INSTR_ERROR_PARAMETER11 (_VI_ERROR+0x3FFC0D22L)/*
0xBFFC0D22 */
#define zde1458_INSTR_ERROR_PARAMETER12 (_VI_ERROR+0x3FFC0D23L)/*
0xBFFC0D23 */
#define zde1458_INSTR_ERROR_PARAMETER13 (_VI_ERROR+0x3FFC0D24L)/*
0xBFFC0D24 */
#define zde1458_INSTR_ERROR_PARAMETER14 (_VI_ERROR+0x3FFC0D25L)/*
0xBFFC0D25 */
#define zde1458_INSTR_ERROR_PARAMETER15 (_VI_ERROR+0x3FFC0D26L)/*
0xBFFC0D26 */
#define zde1458_INSTR_ERROR_PARAMETER16 (_VI_ERROR+0x3FFC0D27L)/*
0xBFFC0D27 */
#define zde1458_INSTR_ERROR_PARAMETER17 (_VI_ERROR+0x3FFC0D28L)/*
0xBFFC0D28 */
#define zde1458_INSTR_ERROR_PARAMETER18 (_VI_ERROR+0x3FFC0D29L)/*
0xBFFC0D29 */
/* Message Defination */
#define zde1458_MSG_NO_ERRORS "No Errors."
#define zde1458_MSG_SELF_TEST_PASSED "Self test passed."
/* static error message */
#define VI_ERROR_PARAMETER1_MSG "Parameter 1 is invalid"
#define VI_ERROR_PARAMETER2_MSG "Parameter 2 is invalid"
#define VI_ERROR_PARAMETER3_MSG "Parameter 3 is invalid"
#define VI_ERROR_PARAMETER4_MSG "Parameter 4 is invalid"
#define VI_ERROR_PARAMETER5_MSG "Parameter 5 is invalid"
#define VI_ERROR_PARAMETER6_MSG "Parameter 6 is invalid"
#define VI_ERROR_PARAMETER7_MSG "Parameter 7 is invalid"
#define VI_ERROR_PARAMETER8_MSG "Parameter 8 is invalid"
#define VI_ERROR_PARAMETER9_MSG "Parameter 9 is invalid"
#define VI_ERROR_PARAMETER10_MSG "Parameter 10 is invalid"
#define VI_ERROR_PARAMETER11_MSG "Parameter 11 is invalid"
#define VI_ERROR_PARAMETER12_MSG "Parameter 12 is invalid"
#define VI_ERROR_PARAMETER13_MSG "Parameter 13 is invalid"
#define VI_ERROR_PARAMETER14_MSG "Parameter 14 is invalid"
#define VI_ERROR_PARAMETER15_MSG "Parameter 15 is invalid"
#define VI_ERROR_PARAMETER16_MSG "Parameter 16 is invalid"
#define VI_ERROR_PARAMETER17_MSG "Parameter 17 is invalid"
#define VI_ERROR_PARAMETER18_MSG "Parameter 18 is invalid"
#define VI_ERROR_FAIL_ID_QUERY_MS
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?