如何确定AUTOSAR Runnable的(实际)循环时间

时间:2016-09-06 09:58:06

标签: c runnable autosar

我已经看到很多代码使用Runnable的循环时间来实现一些定时器/超时。问题是如果有人决定更改此Runnable的循环时间,则计时器将不正确。 例如:

#define FOO_TIMER_100MS_REACHED (10U)

FUNC(void, FOO_CODE) FOO_Cycle_10ms( void )
{
  static uint8 t = 0;

  if( t < FOO_TIMER_100MS_REACHED )
  {
    t++;
  }
  else
  {
    ; /* 100ms elapsed - do whatever is necessary */
  }
}

那么,如何从Runnable中确定周期性触发函数FOO_Cycle_10ms的周期时间? 关于上面的例子,我正在寻找类似的东西:

#define FOO_TIMER_100MS_REACHED ((uint8)(100U / CYCLE_TIME_FOO_Cycle_10ms))

2 个答案:

答案 0 :(得分:0)

  

问题是,如果有人决定更改此Runnable的循环时间,则计时器将不正确。

但这真的会发生吗?软件组件描述(SWCD)始终与实现紧密耦合。如果有人会改变,例如SWCD中的可运行名称或删除访问点,代码也不会编译。

集成商可以在稍后的开发阶段更改其他参数,例如可运行到任务映射,但该周期是SWCD的一部分,因此也与实现相结合。

所以,恕我直言所描述的问题不应该出现。如果这没有回答您的问题,请提供有关实际用例的更多信息。

答案 1 :(得分:0)

嗯,SWCD实际上是你的合同,应该与SWCD和开发人员负责人讨论变更。如果没有,那么你的过程是有缺陷的。

另一方面,有一些方法:

  • 也许您可以从SWCD计时事件期间创建一个常量值
  • 创建TimeService(Tm)模块的ClientServer接口并进行设置。 Tm允许一些方便的SW定时器由一些GPT Predef定时器支持
  • 使用StbM-ServiceNeeds创建一个ClientServer接口到SWCD。 然后,您应该能够访问同步时基。