当前位置: 首页 > article >正文

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_NODE
  enum 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 Management
  if (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 node
  write( "ERROR: the function TestWaitForvFlashPackReprogrammed is only available in a test module!");
  return TestFunctionInSimulationCalled;
#endif // TEST_NODE
}
  • 如果想要刷写自己的vFlash文件,简单的话就是把 gFlashpack给个自己文件的路径即可;想要集成在自己工程中用的话,要引用 #include "vFlash\Utilities.cin",调用 TestWaitForvFlashPackReprogrammed函数即可。

  • 自己调用的时候,别忘了要在测试模块中加载下面的DLL
    在这里插入图片描述

在这里插入图片描述

🌎总结

23

7

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18

http://www.kler.cn/a/296.html

相关文章:

  • 多文件比对
  • 检索增强生成
  • k8s系列--docker拉取镜像导入k8s的containerd中
  • P5289 [十二省联考 2019] 皮配 做题记录
  • MySQL初始安装登录:ERROR 2003 (HY000): Can‘t connect to MySQL server on
  • AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲
  • 【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?
  • 【前端老赵的CSS简明教程】10-1 CSS预处理器和使用方法
  • 学习C++这几个网站足矣
  • 如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南
  • 【Java实战】不会还有人用if else进行参数校验吧
  • linux进程管理
  • 代码规范(C++)
  • 【拳打蓝桥杯】最基础的数组你真的掌握了吗?
  • 利用Postman的简单运用解决小问题的过程
  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E
  • 蓝桥杯刷题第十天
  • 前端安全:如何保障 Web 应用程序的安全性?
  • leetcode刷题 | 关于前缀树的题型总结
  • 世界顶级五大女程序媛,不仅技术强还都是美女
  • 第十二届蓝桥杯省赛详解
  • 【Android -- 软技能】聊聊程序员的软技能
  • 从大专到测开,上海某字母站大厂的面试题,岗位是测开(25K*16)
  • 如何一眼分辨是C还是C++
  • 【JavaSE】类和对象的详解
  • 8大主流编程语言的适用领域,你可能选错了语言