我已经看到很多代码使用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))
答案 0 :(得分:0)
问题是,如果有人决定更改此Runnable的循环时间,则计时器将不正确。
但这真的会发生吗?软件组件描述(SWCD)始终与实现紧密耦合。如果有人会改变,例如SWCD中的可运行名称或删除访问点,代码也不会编译。
集成商可以在稍后的开发阶段更改其他参数,例如可运行到任务映射,但该周期是SWCD的一部分,因此也与实现相结合。
所以,恕我直言所描述的问题不应该出现。如果这没有回答您的问题,请提供有关实际用例的更多信息。
答案 1 :(得分:0)
嗯,SWCD实际上是你的合同,应该与SWCD和开发人员负责人讨论变更。如果没有,那么你的过程是有缺陷的。
另一方面,有一些方法: