CAPL编程的催化剂——CAPLdll的实现

自建dll文件和capl调用dll文件 生成dll文件,并由capl调用 阅读详情

欢迎大家来到带你玩转车载测试系列课程,我是分享人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
|-----------------------------------------------------------------------------
C语言编写CAPLdll CANoe是一个强大的总线仿真工具,通过CAPL语言可以实现较为复杂的ECU内部逻辑,有效仿真总线网络。但是在使用的时候经常会碰到CAPL库函数不够用的情况,比如需要用到AES加密时,CAPL没有对应函数,而又没有现成的CAPL加密代码。这时就需要编写一个CAPL dll文件,调用外部代码。本文介绍通过Visual Studio编译c代码生成CAPL dll。 阅读详情

相关推荐

CAPL DLL 集成

本文介绍了C++环境下配置和集成DLL项目的方法,重点针对CAPL和Python调用场景。主要内容包括:1)环境配置步骤,包含项目创建、头文件配置和架构选择注意事项;2)项目实例展示,提供了常规输入输出DLL和带多参数DLL的代码示例,详细说明函数导出格式和参数定义;3)对CANoe官方例程进行解析,解释参数传递机制。文章特别强调在CAPL调用时需注意导出函数规范和架构匹配问题,并对比了Python调用的差异。最后指出复杂参数处理可参考官方文档进一步开发。

qq_54577850的博客 1027

CANOE制造dll文件,以及应用dll文件

【代码】CANOE制造dll文件,以及应用dll文件。

weixin_44098348的博客 3405

CAPL_DLL_Note

路径:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 11.0.96\Programming\CAPLdll。4.按照格式编写需要的函数,函数名前添加CAPLEXPORT far CAPLPASCAL。2.使用visual studio打开CANoe的2013project。3.配置生成dll文件C/C++结构体对齐方式。5.在CAPL函数列表按照格式填写相关信息。1.使用CANoe的demo工程。7.CAPL导入dll文件。

weixin_50043572的博客 688

CAPL调用DLL全攻略:从函数导出表配置到CANoe 16.2.55环境部署

本文详细介绍了在CANoe 16.2.55环境中,如何通过配置CAPL_DLL_INFO4函数导出表,实现CAPL脚本调用自定义DLL的完整流程。内容涵盖从Visual Studio工程配置、导出表精确定义到DLL部署与调试的实战指南,帮助汽车电子测试工程师高效集成C/C++代码,扩展CAPL自动化测试能力。

weixin_29007135的博客 366

CANoe诊断功能——安全算法调用介绍

通常情况下,在CANoe中加载诊断数据库cdd文件后,我们就可以在DiagnosticConsole诊断面板里进行安全访问相关操作。但是至少要需要手动依次触发3个诊断命令(如下图):扩展模式切换(10 03)- 请求种子(27 03)-发送秘钥(27 04),在一些诊断服务(比如22写服务)中会频繁地涉及到安全访问,这时候手动发送安全访问指令会非常不方便。Don’t worry, 山人自有妙计,今天小编就在这里介绍如何利用CANoe的CAPL函数快速实现安全访问的方法。 在进入函数讲解之前..

怿星科技的博客 1万+

【CANoe】CAPL_UDS安全算法dll制作

使用UDS进行刷写时,需要27服务解密后,才能正确执行刷写,本文提供两种制作27解密dll的方法,用于CANoe的CAPL脚本中。

星Yeah 的博客 1万+

诊断DLL——2.CAPL_DLL集成安全访问算法

在实际诊断工程应用中,如UDS刷写——27服务,经常会遇到一些Seed2Key的算法问题,为了安全保密,这个算法的源码不便公开,我们可以将其打包成DLL,然后在CANoe诊断控制面板、CANoe.Diva自动化测试、周立功、CAPL等里面直接调用DLL即可。一般的C++创建的DLL在CAPL中是无法使用的,必须遵循CAPL的语法创建的才可以正常使用。在CANoe/CANalyzer 的安装包中, 有Vector 的官方Demo,我们可以仿照着去创建我们的DLL。

诊断协议那些事儿's blog 2405

CANOE dll文件生成及CAPL调用dll文件方法

函数封装dll文件capl调用dll中的函数数据类型的问题。

weixin_46481662的博客 6845

如何编写CAPL DLL

本实例为个人自己开发的基于Vector 的CAPL语言开发的DLL文件,供参考!如有问题,请留言。

Nginx源码安装和基础配置

Nginx简介 nginx: 世界第二大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。 代理服务器: 正向:squid 反向: squid:最古老的代理服务器 LVS: 优点: 1.抗负载能力强、是工作在网络4层之上仅作分发之用 2.配置性比较低,这是一个缺点也是一个优点,简单不易出错 3.工作稳定,抗负载能力很强,有完整的双机热备方案

hjyhjy0的博客 498

Badcase归因分析“四部曲”

badcase是业内的专业名词,简单解释一下。bad是坏,case是案例,说白了就是模型或者具体规则无法很好预测的那些案例。以分类模型为例,本来一个样本应该是负类的,结果预测为正类,那这个样本就能被称为bad case。那相对应的就是good case就是优秀案例。

qq_25438419的博客 3499

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1485

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 179

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。

weixin_28832121的博客 246

微信H5网页支付JSAPI部分用户报错:system:access_denied 的解决方案

JSAPI 支付仅支持微信内置浏览器调用。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1667

霜冰优化算法(RIME)详解:从自然现象到智能优化

霜冰优化算法(RIME)是一种新型元启发式优化算法,灵感源于自然界中霜冰的形成过程。该算法通过模拟软霜和硬霜的不同生长特性,实现了高效的全局探索和局部开发平衡。RIME算法包含三个核心机制:软霜搜索策略模拟随机覆盖特性实现全局探索;硬霜穿刺机制模拟定向生长特性进行局部开发;正向贪婪选择机制确保解的持续优化。与遗传算法、粒子群算法相比,RIME具有参数少、收敛快、自适应平衡等优势,特别适合处理高维复杂优化问题。算法已在工程优化、机器学习等领域获得广泛应用,发表一年内即成为高被引论文。

qq_42212808的博客 764

PCL点云八叉树体素中心下采样,体素包含点索引提取

基于PCL octree实现点云八叉树计算,支持提取体素中心点进行点云下采样;根据任一点坐标,可以得到其在八叉树中的位置,输出对应体素内其余点的坐标或者索引

qq_48694523的博客 451

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 带你玩转车载测试——CAPL入门篇六:CAPL常用库函数介绍(二)
下一篇: 软件开发中常用数据结构介绍:C语言链表
车载软件开发M哥
博客等级 码龄9年 1397粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载软件开发M哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值