【问题标题】:How to use a common variable in multiple files in CAPL (How to replace extern)CAPL中如何在多个文件中使用一个公共变量(如何替换extern)
【发布时间】:2017-03-21 21:38:52
【问题描述】:

我想在 5 个主要 CAN 文件中使用一个变量。我有一个适用于所有 5 个 CAN 文件的包含文件。所以我在这个包含文件中定义并声明了变量。但是当我从主文件中读取变量的值时,我总是得到 0。不幸的是,外部在 CAPL 中不可用。那么有没有办法做到这一点。

谢谢。

【问题讨论】:

  • 请提供一些代码。变量是如何定义的?你如何包含文件? ...

标签: capl


【解决方案1】:

如果您将 CAPL 与 CANoe 一起使用,您可以使用 Vector CANdb++ 编辑器创建一个数据库,并在数据库中声明一个环境变量。

您可以像这样在所有 CAPL 文件中访问此变量:

putValue(YourEnvironmentVariable,12); // Assigns the value 12 to the variable
Write("%d",getValue(YourEnvironmentVariable); //Prints 12

您还可以声明一个在环境变量更改时引发的事件。

 on envVar YourEnvironmentVariable{//do something...}

【讨论】:

    【解决方案2】:

    您可以使用 系统变量 进行全局访问。

    首先你要在一个包含文件global.cin中定义一个新的命名空间和一个系统变量:

    /* global.cin */
    
    on Start {
      // define a namespace
      sysDefineNamespace("myNamespace");
    
      // define an integer system variable with starting, minimum and maximum value
      sysDefineVariableInt("myNamespace", "mySysvar", 0, 0, 99); 
    }
    


    通过在main.can 文件中包含global.cin,您可以使用相应的CAPL 函数访问系统变量:

    /* main.can */
    
    includes
    {
      #include "global.cin"
    }
    
    
    on Start {
      // set system variable value
      sysSetVariableInt("myNamespace", "mySysvar", 42));
    
      // read system variable value
      write("mySysvar: %d", sysGetVariableInt("myNamespace", "mySysvar"));
    }
    


    对于整数以外的数据类型,有相应的 CAPL 函数,其命名风格为 sysDefineVariable<data-type>()
    sysSetVariable<data-type>()
    sysGetVariable<data-type>()

    您可以在CAPL Functions -> System Variables CAPL FunctionsCAPL Functions -> System Variables CAPL Functions下的 CANoe / CANalyzer 文档中找到有关通过 CAPL 访问系统变量的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 2019-11-01
      • 2012-10-16
      • 2017-12-06
      相关资源
      最近更新 更多