我有一个控制 CAN 信号发送开始的 CAPL 测试代码。我的目标是延迟发送过程的开始。我的想法是通过 setTimer() 函数与 isTimerActive() 结合使用。
一般来说,我的代码如下所示:
main() {
CANstart();
function_2();
function_3();
}
CANstart() {
SetTimer(Delay, 5000); //Timer initialization, set to be 5000ms
while (isTimerActive()==1) {
// this while loop avoids that the code is proceding while the settimer exception is being called and executed
}
StartCANTransmitting(); // After this function, jump back to main and proceed with function_2
}
on timer Delay {
// Do nothing, just wait
}
上面的程序代码导致卡在那个点,CANoe 没有响应,我可以结束模拟的唯一方法是通过任务管理器。
- 从我这边进一步检查得出的结论是计时器需要更多时间来处理并且根本没有执行。
- 如果没有 isTimerActive() 函数,程序代码不会等待计时器完成,也不会有任何延迟。似乎代码在不等待异常的情况下运行。
- 似乎 CAPL 处理循环非常糟糕。
我查看了 stackoverflow,以下论坛帖子讨论了我遇到的非常相似的问题,但没有提供任何可行的解决方案: