2016-09-06 11 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 */ 
    } 
} 

, 나는이 Runnable를 내부에서 주기적으로 트리거 기능 FOO_Cycle_10ms의 사이클 시간을 확인하는 방법? 내가 좋아하는 뭔가를 찾고 있어요 위의 예와 관련하여 :

#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 타이밍 이벤트 기간
  • TimeService (TM)에 클라이언트 서버 인터페이스를 만들기 모듈에서 상수 값을 만들고하도록 할 수 있습니다 : 다른 측면에서

    는 몇 가지 방법이 있습니다 설정. Tm은 일부 GPT가 지원하는 편리한 SW 타이머를 허용합니다. Predef Timers
  • SWCD에 StbM-ServiceNeeds로 ClientServer 인터페이스를 생성하십시오. 그러면 동기화 된 시간대에 액세스 할 수 있어야합니다.
+0

다른 대답에서는이 문제에 대한 사용 사례를 언급했습니다. "SWCD 타이밍 이벤트 기간의 상수 값"은 실제로 내가 찾고있는 것입니다 ... –

+0

나는 하루 종일 그들을 만났기 때문에 유스 케이스에 무슨 뜻인지 알고 있습니다. SW 아키텍트로서, 나는 외부로부터 이러한 SWCD를 생성하기로되어 있지만, 어떤 것들은 SWC 개발자로부터 나오기도한다.그러나 적어도 스케쥴링 부분은 요점 중 하나입니다, SW 아키텍트는 SW 시스템을 정의해야하고 그 변경 사항은 리뷰에 의해 명확히되어야합니다 .. 예, 프로세스가 처리하기 어려울 수 있습니다 :) 그리고 툴링 이 도구는 비용이 많이 들며 실제 무료/OSS가 없습니다 (artop은 초보자 용이지만 회사 이메일이 필요합니다. – kesselhaus