CANoe CAPL struct初始化

时间:2016-08-17 09:54:32

标签: struct capl canoe

我在向量CANoe CAPL中声明和初始化struct时遇到了问题。我已经知道C / C ++中的结构,但似乎CAPL中的声明有点不同。

Vector帮助功能并没有真正揭示。

我有许多CAN ID(例如0x61A)。每个CAN ID都分配了不同数量的信号ID(例如0xDDF6)。我想从CAN ID中读出循环信号ID,并计划在一个复杂的struct中组织它。

我已经尝试过不同类型的声明和初始化,但每次出现解析错误。

你能帮我解决一下问题吗? 与struct不同的任何其他想法来组织我的价值观?

谢谢你,问候!

3 个答案:

答案 0 :(得分:2)

来自CAPL文档:

  

结构化类型可以在CAPL中以与C ...类似的方式声明。

     

...它们只能在带有CANoe 7.0版Service Pack 3的CAPL程序中使用。

示例:

variables
{
  /* declarating a struct */
  struct MyData {
    int i;
    float f;
  };
}

on start
{
  /* defining a struct variable and initiliazing the elements */
  struct MyData data = {
    i = 42,
    f = 1.32
  };

  /* accessing the struct elements */
  write("i=%d, f=%f", data.i, data.f);
}

输出:

i=42, f=1.320000

答案 1 :(得分:2)

我在struct访问时遇到了漏洞。试图在变量声明例程中初始化struct参数,而不是在on start例程中。

我的多重数据访问的工作代码现在是:

variables
{
  struct Veh_Database
  {
    dword ECU;
    dword ParamID[8][2];
  };
  struct Veh_Database ECU_Info[12];
}

on start
{
  ECU_Info[0].ECU = 0x1A;
  ECU_Info[0].ParamID[0][0] = 0xDD;     
  ECU_Info[0].ParamID[0][1] = 0xF6;
  /* ... */
  ECU_Info[1].ECU = 0x12;
  ECU_Info[1].ParamID[0][0] = 0xDE;
  ECU_Info[1].ParamID[0][1] = 0x9C;
  /* ... */
}

感谢您的帮助!

答案 2 :(得分:0)

仅出于完整性考虑:还可以在变量声明中初始化struct

variables
{
   struct myStruct
   {
      dword val;
      dword arr[8];
   };
   struct myStruct myInstance = {1, {1,2,3,4,5,6,7,8}};
}

(在Canoe 10上测试)