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类 状态模式搬移函数以多…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...