Я видел довольно много кода, который использует время цикла Runnable для реализации некоторого таймера/таймаута. Проблема в том, что если кто-то решит изменить время цикла этого Runnable, таймер будет неправильным. Пример:Как определить (реальное) время цикла AUTOSAR 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 */
}
}
Итак, как можно определить время цикла периодически запускаемых функции FOO_Cycle_10ms внутри этого Runnable? В отношении приведенного выше примера, я ищу что-то вроде:
#define FOO_TIMER_100MS_REACHED ((uint8)(100U/CYCLE_TIME_FOO_Cycle_10ms))
Вот некоторые прецеденты: 1. Человек, создающий SWCD и лицо, реализующее этот код, может быть не таким. У разработчика очень часто даже нет доступа к инструменту конфигурации. (Конечно, он может просматривать ARXML) 2. Время цикла может меняться во время проекта . из-за усилий по оптимизации. Затем вам нужно настроить код. Лучший случай, только определение - здесь FOO_TIMER_100MS_REACHED - затронуто, но, скорее всего, вам нужно проанализировать полный код. 3. Вы пишете код для некоторого SW-C, который должен быть повторно использован в других проектах. –