如何定义一个带有 sysvar 参数的 CAPL 函数

how to define a CAPL function taking a sysvar argument

在Vector CANoe中,是否可以像系统函数那样定义一个接受系统变量参数的函数TestWaitForSignalMatch()

对于我的用例,提供系统变量的当前值是不够的,因为我想将系统变量传递给 TestWaitForSignalMatch() 或类似的系统函数。

CANoe 帮助似乎显示示例:

long TestWaitForSignalMatch (Signal aSignal, float aCompareValue, dword aTimeout); // form 1
long TestWaitForSignalMatch (sysvar aSysVar, float aCompareValue, dword aTimeout); // form 3

我这样试过

void foo(sysvar aSysvar) {}
         ^

或这个

void foo(sysvar *aSysvar) {}
         ^

但在这两种情况下,我都在 sysvar 关键字的标记位置遇到解析错误。

我成功创建了带有信号参数的函数,但与 CANoe 帮助中的语法不同,我必须使用指针。 这有效:

void foo(signal *aSignal) {}

显然帮助中的文档在这一点上是不正确的。当我省略 * 时,它会导致 signal 关键字后出现解析错误,如帮助中所示:

void bar(signal aSignal) {}
               ^

那么定义带有 sysvar 参数的函数的正确语法是什么? (如果可能的话)

如果版本很重要,我目前正在使用 CANoe 9.0.53(SP1)、9.0.135(SP7) 或 10.0.125(SP6) 进行测试。

是的,你可以。只需进一步定义您的 sysvar 类型,而不仅仅是 sysvar。

System variables, with indication of type and *. Possible types: Data, Int, Float, String, IntArray, and FloatArray. Example declaration: sysvarFloat * sv

您没有指定CANoe SP版本,所以旧版本可能不支持它,但是为了确定这一点,在[=35]中搜索函数参数 =],那么您应该获得可在当前 CANoe 设置中使用的可能功能参数的完整列表。应该这样开始:

  • 整数(byte、word、dword、int、long、qword、int64)示例 声明:long 1
  • 整数(byte、word、dword、int、long、qword、int64)示例 声明:long 1
  • 单个字符(char)声明示例:char ch
  • 枚举示例声明:枚举颜色 c
  • 关联字段示例声明:int m[float]。关联的 字段会自动传输为参考。

..............

  • 系统变量,带有类型和*的指示。可能的类型: Data、Int、Float、String、IntArray 和 FloatArray。例子 声明:sysvarFloat * sv