如何在CAPL中的多个文件中使用公共变量(如何替换extern)

时间:2016-01-18 12:54:35

标签: capl

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

感谢。

2 个答案:

答案 0 :(得分:1)

如果您将CAPL与CANoe一起使用,您可以使用Vector CANdb ++ Editor创建一个数据库,并在数据库中声明一个Environment-Variable。

您可以在所有CAPL文件中访问此变量,如下所示:

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

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

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

答案 1 :(得分:1)

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

首先,您要在包含文件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); 
}


通过在global.cin文件中包含main.can,您可以使用相应的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 Functions

下的CANoe / CANalyzer文档中找到有关通过CAPL访问系统变量的更多信息