CAPL定时器的使用:如何实现多重循环

假设现在有这样一个需求:

500ms内发送一条报文0x28d四次,然后隔5000ms,再在500ms内把这条报文发四次,这样一直循环。要怎么实现?

当我们拿到一个需求,需要对其进行分解和整合。500ms内发送can报文0x28d四次,那么是在500ms的哪个时间点发送没有确定。这里我们假设250ms时发送,发送完还需要等待剩下的250ms,250ms后再等待5000ms,进入下一次循环。

所以你需要定义三个定时器:第一个定时器的事件函数里实现发送四次0x28d报文,第二、第三个定时器的事件函数是一个空函数,只作为时间的流逝。然后按顺序启动,把第二个定时器的启动放在第一个定时器的事件函数里,把第三个定时器的启动放在第二个定时器的事件函数里。然后把第一个定时器的启动放在第三个定时器的事件函数里,收尾相连,实现循环,就像贪吃蛇一样。

下面是具体的代码实现:

variables
{
  message 0x28d       msg_Tx_0x28d = {dlc = 8};
  msTimer             t_SendMsg_0x28d;
  msTimer             t_Sleep_250ms;
  msTimer             t_Sleep_5000ms;
}

on timer t_SendMsg_0x28d
{
  msg_Tx_0x28d.msgChannel = 1;
  msg_Tx_0x28d.qword(0) = 0x00000010400A0010ll;
  output(msg_Tx_0x28d);
  output(msg_Tx_0x28d);
  output(msg_Tx_0x28d);
  output(msg_Tx_0x28d);
  setTimer(t_Sleep_250ms, 250);
}

on ti

你可能感兴趣的:(【付费专栏】CAPL编程语言,CAPL,定时器)