欢迎大家来到带你玩转车载测试系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。
学习过程中如有任何疑问,可底下评论!
如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!
CANoe作为一款功能强大的总线开发及测试工具,不仅仅是因为其丰富的库函数,最重要的是其兼容了多种编程语言,可以实现灵活的开发,极大的解决了纯CAPL编程所带来的限制,如通过动态链接库(DLL)来实现复杂函数的编写,使其能够在CAPL中可以调用,下面将对DLL的实现进行分析。
1. 什么是capldll
capldll是指利用C/C++语言按照VECTOR制定的规则生成的可以在CAPL中进行调用的.dll文件,与一般的dll文件所不同的是,capldll文件必须按照Vector官方指定的模板进行生成,方可在CAPL中进行调用,否则将无法调用。
Vector官方指定的模板位于C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 17.0.201\Programming\CAPLdll\文件下,如下图。
文件中有VS2017和VS2013两个工程,大家可以根据自己VS的版本选择任意工程,接下里我将以VS2017这一工程举例说明。
2. VS2017工程介绍
在VS2017工程中打开capldll.sln文件,如下图所示:
capldll.cpp这个文件初看相当复杂,从整体上来说,这段代码主要包含了两部分:自定义函数实现和回调函数定义,今天的主要任务是实现自定义函数,这里的函数定义与普通函数定义差不多,只是利用了CAPL的格式。
其格式如下所示:
(1)编写一个赋值函数:
void CAPLEXPORT far CAPLPASCAL appPut(unsigned long x
{
data = x;
}
{"dllPut", (CAPL_FARCALL)appPut, "CAPL_DLL","This function will save data from CAPL to DLL memory",'V', 1, "D", "\000", {"x"}},
其中,各个参数具体含义如下:
CAPL中数据类型与C/C++中的数据类型对应关系如下:
(2)使用引用编写dll函数:
void CAPLEXPORT far CAPLPASCAL appSum(long i, long j, long* s)
{
*s = i + j;
}
{"sum", (CAPL_FARCALL) appSum, "CAPL_DLL", "Sum via
reference parameter", 'V', 3, {'L', 'L', 'L' - 128}, "", {"i", "j", "s"} },
3. 实例解读
生成capldll文件包含两个数求和的函数,并在CANoe中调用验证,代码如下。
/*----------------------------------------------------------------------------
|
| File Name: capldll.cpp
|
| Example of a capl DLL implementation module and using CAPLLbacks.
|-----------------------------------------------------------------------------
| A U T H O R I D E N T I T Y
|-----------------------------------------------------------------------------
| Author Initials
| ------ --------
| Thomas Riegraf Ri Vector Informatik GmbH
| Hans Quecke Qu Vector Informatik GmbH
| Stefan Albus As Vector Informatik GmbH
|-----------------------------------------------------------------------------
| R E V I S I O N H I S T O R Y
|-----------------------------------------------------------------------------
| Date Ver Author Description
| ---------- --- ------ --------------------------------------------------
| 2003-10-07 1.0 As Created
| 2007-03-26 1.1 Ej Export of the DLL function table as variable
| Use of CAPL_DLL_INFO3
| Support of long name CAPL function calls
| 2020-01-23 1.2 As Support for GCC and Clang compiler on Linux
| Support for MINGW-64 compiler on Windows
|-----------------------------------------------------------------------------
| C O P Y R I G H T
|-----------------------------------------------------------------------------
| Copyright (c) 1994 - 2003 by Vector Informatik GmbH. All rights reserved.
----------------------------------------------------------------------------*/
#define USECDLL_FEATURE
#define _BUILDNODELAYERDLL
#include "../Includes/cdll.h"
#include "../Includes/VIA.h"
#include "../Includes/VIA_CDLL.h"
#include
#include
#include
#include
#include
Debug后生成capldll.dll文件导入CAPL如下图:
运行CANoe输出结果如下:
说明我们生成的capldll文件可以实现功能。
感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!