首页 文章

除了testwaitfortimeout()之外,CAPL中的延迟功能

提问于
浏览
0

我有一个控制GPIB电源的CAPL测试节点 . 该CAPL生成每3 ms修改一次的信号 . 我的CAPL看起来像这样:

...
testcase wavGenerator()
{
   GPIBWrite(myDevice, "VOLT", voltValue);
   testwaitfortimeout(3);
   ...
}

问题是这个testwaitfortimeout()函数在测试报告中生成一个注释,因为我为每个测试用例使用这个函数2000/3000次,所以我以一个巨大的测试报告结束 .

我试过实现一个函数来生成像waitfortimeout()那样的“延迟”,如下所示:

void delay(int ms)
{
   float refTime;
   refTime = timeNowFloat();
   while(timeNowFloat() < (refTime + ms*100))
   {
      /* Wait to reach expected time*/
   }
}

但这会使CANoe崩溃 . 我用setTimer()函数试过这样的东西,但问题是一样的 . 我怎样才能产生这种延迟?

2 回答

  • 2

    一个想法可能是使用计时器:

    variables
    {
      msTimer myTimer;
    }
    
    testcase wavGenerator()
    {
      GPIBWrite(myDevice, "VOLT", voltValue);
      setTimer(myTimer, 3);
    }
    
    on timer myTimer
    {
      // your code
    }
    

    或者,您始终可以创建自定义样式表(XSLT),从报表中筛选对testwaitfortimeout的所有调用 .

  • 0

    我找到了一种方法来处理这个问题,使用计时器,EnvVar和函数testWaitForEnvVar()

    on timer tDelay
    {
      @EnvDelayFunct = 1;
    }
    
    void delay(int ms)
    {
      write("Wait for %i ms", ms);
      int a;
      setTimer(tDelay, ms);
      a = testWaitForEnvVar(EnvDelayFunct, 0);
      @EnvDelayFunct = 0;
    }
    

相关问题