2016-09-06 20 views
3

Я видел довольно много кода, который использует время цикла 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)) 

ответ

0

Проблема заключается в том, что если кто-то решит изменить время цикла этого Runnable, таймер будет неправильным.

Но может ли это быть на самом деле? Описание программного компонента (SWCD) всегда тесно связано с реализацией. Если кто-то изменится, например. имя исполняемого файла в SWCD или удалить точку доступа, код тоже не будет компилироваться.

Другие параметры, такие как сопоставление выполняемых задач, могут быть изменены интегратором на более поздней стадии разработки, но этот период является частью SWCD и, следовательно, также связан с реализацией.

Итак, ИМХО описанная проблема не должна возникать. Если это не ответит на ваш вопрос, предоставьте дополнительную информацию о фактическом прецеденте.

+1

Вот некоторые прецеденты: 1. Человек, создающий SWCD и лицо, реализующее этот код, может быть не таким. У разработчика очень часто даже нет доступа к инструменту конфигурации. (Конечно, он может просматривать ARXML) 2. Время цикла может меняться во время проекта . из-за усилий по оптимизации. Затем вам нужно настроить код. Лучший случай, только определение - здесь FOO_TIMER_100MS_REACHED - затронуто, но, скорее всего, вам нужно проанализировать полный код. 3. Вы пишете код для некоторого SW-C, который должен быть повторно использован в других проектах. –

0

Ну, на самом деле, SWCD - это ваш контракт, который должен обсуждаться на изменениях с ответственностью SWCD и разработчика. Если нет, то ваш процесс испорчен.

С другой стороны, есть несколько способов:

  • Может быть, вы можете создать постоянное значение из вашего SWCD газораспределительного периода событий
  • Создайте ClientServer интерфейс к TimeService (Tm) модуль и его настроить. Tm позволяет использовать некоторые удобные таймеры SW, поддерживаемые некоторыми таймерами Predef GPT.
  • Создайте интерфейс ClientServer с помощью StbM-ServiceNeeds на ваш SWCD. Затем вы должны иметь доступ к Синхронизированной базе времени.
+0

В другом ответе я упомянул о случаях использования этой проблемы. «Постоянное значение из вашего периода времени синхронизации SWCD» на самом деле то, что я ищу ... –

+0

Я знаю, что вы имеете в виду с прецедентами, так как я встречаюсь с ними весь день. Как архитектор SW, я должен создать этот SWCD снаружи, но некоторые вещи также, скорее всего, приходят от разработчиков SWC.Но, по крайней мере, часть планирования является одной из точек, разработчик SW должен определить систему SW, и изменения в этом определении должны быть уточнены в обзорах .. да, я знаю, процессы могут быть трудными для обработки :) И оснастка это другое, поскольку эти инструменты стоят целое состояние, и нет реального бесплатного/OSS (арчоп является рудиментарным, но вам все равно нужна электронная почта компании – kesselhaus