1、引子
有网友问我一个CAPL中timer定时器的代码问题。他在CANoe工程中写了一段代码:每5秒循环触发一次定时器事件程序,输出一句文本信息到Write窗口。但是执行后发现并不是每5秒触发一次定时器事件程序,而是非常快的触发定时器事件程序。当他把这段代码复制到一个新的CANoe工程后,一切又正常了起来。这件事情令他非常困扰。
我首先让他把CAPL代码发我:
variables
{timer t1;
}on timer t1
{write("t1 timeout");setTimer(t1, 5);
}on start
{setTimer(t1, 5);
}
代码量很少,逻辑也很清晰简单:在CANoe运行时,启动定时器t1倒计时5秒,倒计时结束触发事件程序on timer t1,执行里面的write函数,输出文本信息"t1 timeout"到窗口。然后又启动定时器t1倒计时5秒,通过嵌套的方式,实现循环。
代码没毛病,从网友提到的在新工程中一切正常可以证明。那么大胆猜测下,问题出在CANoe工程中。我让网友把出问题的那个CANoe工程文件发送给我。
2、问题分析
拿到工程后,我先是执行了一次代码,从Write窗口中看到输出的文本信息确实很快:
代码没问题,肯定是工程的问题。我拿到CANoe工程后,使用demo license可以运行此工程