CANoe中使用CAPL函数接口调用Vflash文件
- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉

-
CAPL中集成了下面那么多调用vFlash的相关函数,其实实际用到的,可能就三五个函数
-
使用这些函数接口必须要在测试模块里面加载
VFLASHNODELAYER.DLL

-
Vector官方有Demo可以学习:
C:\Users\Public\Documents\Vector\vFlash\8\Examples\vFlash with CANoe\vFlashViaNodeLayer -
打开之后,CANoe和Vflash的通道都配置一样(这个工程需要真实总线环境,simulation不行)

- 直接运行测试用例,可以看到Trace有数据,测试pass

- 为什么即使没接真实的件,他也能有报文和刷写呢?因为simulation中它模拟节点做了应答

- Demo中的测试用例呢,就调用了
"vFlash\Utilities.cin"中的TestWaitForvFlashPackReprogrammed函数就完成了刷写

- 再看下
TestWaitForvFlashPackReprogrammed函数按照下面步骤完成的刷写 - TestWaitForvFlashInitialized:初始化vFlash
- TestWaitForvFlashProjectLoaded :加载.vflashPack工程
- TestWaitForvFlashProjectLoaded :开始刷写
- TestWaitForvFlashProjectUnloaded:卸载工程文件
- TestWaitForvFlashDeinitialized:xxx
// Performs all necessary steps to reprogram the passed vFlashPack
// This function will wait until reprogramming has completed (it cannot be used in a simulation node)
enum vFlashStatusCode TestWaitForvFlashPackReprogrammed(char flashpack[])
{
// Test functions are only available in test modules!
#if TEST_NODEenum vFlashStatusCode lastStatusCode;enum vFlashStatusCode resultCode;char errorText[gkMaxErrorTextLength];int hasProjectLoaded = 1;if (!ProcessPathName(flashpack)) {snprintf(errorText, gkMaxErrorTextLength, "FATAL ERROR: No path to flashpack given!");write(errorText); TestStepFail("TestWaitForvFlashInitialized", errorText);return FR_FileNotFound; }//----- Initialize vFlash Library -----lastStatusCode = resultCode = (enum vFlashStatusCode) TestWaitForvFlashInitialized();if (lastStatusCode != Success){TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash initialization error: %s", errorText);write(errorText);TestStepFail("TestWaitForvFlashInitialized", errorText);return resultCode;}else{TestStepPass("TestWaitForvFlashInitialized", "vFlash initialized successfully");}// from here on, return statements are not possible, because we have to call the "teardown" methods as well!// ==> how much complicated want we to be...//----- Load Project ----lastStatusCode = resultCode = (enum vFlashStatusCode) TestWaitForvFlashProjectLoaded(_gFlashpack);if (lastStatusCode != Success){hasProjectLoaded = 0;TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash load project error: %s", errorText);write(errorText);TestStepFail("TestWaitForvFlashProjectLoaded", errorText);}else{TestStepPass("TestWaitForvFlashProjectLoaded", "Successfully loaded project: %s", _gFlashpack);}//----- Activate Network// Activation of this function call is only required in case of flashing a FlexRay ECU // and vFlash has to do Network Managementif (lastStatusCode == Success){lastStatusCode = resultCode = (enum vFlashStatusCode) TestWaitForvFlashNetworkActivated();if (lastStatusCode != Success){TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash activate network error: %s", errorText);TestStepFail("TestWaitForvFlashNetworkActivated", errorText);write(errorText);}else{TestStepPass("TestWaitForvFlashNetworkActivated", "Network activated successfully");}}//----- Start Reprogramming ----if (lastStatusCode == Success){lastStatusCode = resultCode = (enum vFlashStatusCode) TestWaitForvFlashReprogrammed();if (lastStatusCode != Success){TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash reprogramming error: %s", errorText);TestStepFail("TestWaitForvFlashReprogrammed", errorText);write(errorText);}else{TestStepPass("TestWaitForvFlashReprogrammed", "ECU reprogrammed successful");}}//----- Unload Project ----if (hasProjectLoaded){lastStatusCode = (enum vFlashStatusCode) TestWaitForvFlashProjectUnloaded();if (lastStatusCode != Success){ TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash unload project error: %s", errorText);TestStepFail("TestWaitForvFlashProjectUnloaded", errorText);write(errorText);}else{TestStepPass("TestWaitForvFlashProjectUnloaded", "Project unloaded successfully");} }//----- Deinitialize vFlash Library ----lastStatusCode = (enum vFlashStatusCode) TestWaitForvFlashDeinitialized();if (lastStatusCode != Success){TestWaitForvFlashLastErrorMessage(errorText, 1024);snprintf(errorText, gkMaxErrorTextLength, "vFlash deinitialization error: %s", errorText);TestStepFail("TestWaitForvFlashDeinitialized", errorText);write(errorText);}else{TestStepPass("TestWaitForvFlashDeinitialized", "vFlash deinitialized successfully");}return resultCode; // last result is of TestWaitForvFlashReprogrammed; result of Unload/Deinitialize ignored
#else // simulation nodewrite( "ERROR: the function TestWaitForvFlashPackReprogrammed is only available in a test module!");return TestFunctionInSimulationCalled;
#endif // TEST_NODE
}
- 如果想要刷写自己的vFlash文件,简单的话就是把 gFlashpack给个自己文件的路径即可;想要集成在自己工程中用的话,要引用
#include "vFlash\Utilities.cin",调用TestWaitForvFlashPackReprogrammed函数即可。

- 自己调用的时候,别忘了要在测试模块中加载下面的DLL


🌎总结


- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
相关文章:
CANoe中使用CAPL函数接口调用Vflash文件
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...
三天吃透计算机网络面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...
shp数据添加wkt字段并导出成csv,leaflet绘制使用
准备的东西:软件2跟软件3具体怎么有这些软件需要自行百度postgresql postgis相关 1.shp数据 2.软件2 3.软件3 1.数据导入 首先你得有软件2的数据库,即postgresql数据库,然后通过postgis的插件进行连接并导入数据, 导入数据…...
Java——二叉树的最近公共祖先及二叉搜索树介绍
目录 二叉树的最近公共祖先 题目 思路一:如果给定的是一颗二叉搜索树, 思路二:假设是孩子双亲表示法 二叉搜索树 定义Node类 查找 删除 插入 二叉树的最近公共祖先 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百…...
Stable Diffusion加chilloutmixni真人图片生成模型,AI绘图杀疯了
上期图文教程,我们分享过AI绘图大模型Stable Diffusion以及中文版本文心AI绘画大模型的基础知识以及代码实现,截至到目前为止。Stable Diffusion模型已经更新到了V2.1版本,其文生图大模型也越来越火,其在2022年底,由AI绘制的图片被荣为国际大奖,让大家对AI绘画大模型也越…...
Matplotlib 绘图实用大全
本文只介绍最简单基本的画图方法 预设 要想画出来的图有些逼格,首先应该进行如下设置 plt.rcParams[font.sans-serif][SimHei] #画图时显示中文字体 plt.rcParams[axes.unicode_minus] False #防止因修改成中文字符,导致某些 unicode 字符不能…...
MyBatis源码用了哪些设计模式?
MyBatis源码用了哪些设计模式?前言一、创建型模式工厂模式单例模式建造者模式二、结构型模式适配器模式代理模式组合模式装饰器模式三、行为型模式模板模式策略模式迭代器模式总结前言 在 MyBatis 的两万多行的框架源码中,使用了大量的设计模式对工程架…...
【16.整数转罗马数字】
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…...
前端小技巧
1.html 1.1 网站自动刷新 应用场景: 网页定期自动刷新(现在基本淘汰了,采用ajax);自动跳转到指定页面,这个自动跳转的好处就是不需要JS调用,属于纯html网页自动跳转 v7-网站自动刷新 你可以…...
Servlet2.0
文章目录更方便的部署方式安装插件使用插件验证程序常见访问出错的解决方案404错误405错误500错误空白页面无法访问此网站在文章 TomcatServlet初识中,我们通过七个大的步骤才可以完成一个简单的Servlet程序,这个过程无疑是非常繁琐的,那么我…...
【c++】继承
目录 一、继承的表现 子类对父类成员的访问权限 二、父类与子类之间的相互赋值 三、继承的作用域 如果是父类和子类构成隐藏呢? 四、子类的成员函数怎么写 1.default构造函数 2.析构函数 所以析构函数不需要我们显式调用。 五、继承与友元函数 六、继承与静…...
minio安装配置和使用(二)客户端安装
安装minio客户端mcli 命令如下: dnf install https://dl.minio.org.cn/client/mc/release/linux-amd64/mcli-20230128202938.0.0.x86_64.rpm 安装完成,在/usr/local/bin/下新增了mcli命令 mcli是对minio进行管理的命令。功能丰富, 基本格式…...
【如何使用Arduino设置GRBL和控制CNC机床】
【如何使用Arduino设置GRBL和控制CNC机床】 前言1. 什么是GRBL?2. 所需硬件3. 如何安装GRBL4. GRBL 配置5. GRBL 控制器5.1 如何使用通用 G 代码发送器5.2 波特率5.3 电机方向5.4 步进比例系数5.5 限位开关5.6 数控机床的归位设置6. 结论前言 如果您正在考虑或正在制造自己的…...
项目测试——博客系统
文章目录项目测试——博客系统项目简介项目功能测试计划web自动化测试1. 测试用例2.web自动化测试说明项目测试——博客系统 项目简介 博客系统主要分为8大模块,分别是注册页,登录页,编辑页,修改页,个人主页…...
【C习题】经典数组与指针面试题(万字)
文章目录一. 一维数组二.字符数组三.字符指针四.二维数组五.指针笔试题一. 一维数组 首先说明:需熟记以下三个规则。 规则1.&数组名指的是取出整个数组的地址。 规则2.数组名被单独放在sizeof内部,计算的是整个数组的大小。 说明:这里的单…...
【ArcGIS Pro二次开发】(13):ProWindow的用法
ProWindow是ArcGIS Pro SDK中的一个WPF控件,具有以下特点: 可扩展性:ProWindow提供了丰富的API和样式,可以轻松地扩展和自定义ArcGIS Pro应用程序的UI。 可定制性:ProWindow支持多种UI控件和布局方式,可以…...
HTML/CSS/JS 基本语法
前端一、HTNL1、文件结构2、文本标签(1)块元素:div(2)行内元素:span(3)格式标签3、图片、音频、视频(1)图片(2)音频< audio >&a…...
对于从事芯片行业的人来说,有哪些知识是需要储备的?
近两年芯片行业大火,不少同学想要转行,却不知道该如何下手,需要学习哪些基础知识,下面就来看看资深工程师怎么说? 随着工艺的发展,芯片肯定是尺寸越来越小,至于小到什么样的程度是极限…...
测试场景设计
测试场景设计 又叫做场景法。其实对于场景法是测试用例中面临最多的,但是这种模式不是很容易总结,有时候是基于经验,有时候是我们对系统的了解。所以在这种情况下,我们强硬的用场景法对其进行规范。 场景法原理 现在的软件几乎…...
《重构》增强代码可读性
文章目录重构原则何为重构为何重构何时重构重构会影响性能吗实例原始类进行重构分解statements方法提取函数搬移函数提炼“积分计算”功能去除临时变量(以查询取代临时变量)运用多态取代与价格相关的条件逻辑代码迁移Movie类Price类 状态模式搬移函数以多…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
