AR3X_BMT 프로젝트 기능

이 내용은 버전 7.6.1 이상에 적용됩니다. AUTOSAR AR3x_BMT 프로젝트는 AUTOSAR SW 아키텍처 및 해당 SW 아키텍처의 SW/C 유형에 적합한 Rhapsody® 구현을 정의합니다.

AR3X_BMT 프로젝트

AR3X_BMT 프로젝트에는 다음이 포함됩니다.
AR3X_BMT 프로젝트에 다음과 같은 두 개의 추가 다이어그램이 있습니다.
  • RIMB 다이어그램 - Rhapsody 구현 블록을 정의합니다.
  • SWC 구현 다이어그램 - RIMBO와 SW/C 유형을 링크시키는 RIMB 오브젝트를 통한 AR SW/C 유형의 구현을 정의합니다.
RIMB 포트는 위임 커넥터를 통해서만 AR 포트에 연결되도록 디자인되었습니다. RIMB 인터페이스에 해당하는 네 가지 유형의 RIMB 포트가 있습니다.
  • RIMB 수신기 포트 - RIMB 수신기 포트 인터페이스를 통해 입력되며 AR 수신기 포트(S/R 인터페이스에서 AR 필수 포트)에 연결하도록 디자인되었습니다.
  • RIMB 송신기 포트 – AR 송신기 포트에 연결하도록 디자인되었습니다.
  • RIMB 클라이언트 포트 – AR 클라이언트 포트에 연결하도록 디자인되었습니다.
  • RIMB 서버 포트 – AR 서버 포트에 연결하도록 디자인되었습니다.
RIMB 인터페이스 - 네 가지 유형의 RIMB 인터페이스가 있습니다.
  • RIMB 수신기 포트 인터페이스
  • RIMB 송신기 포트 인터페이스
  • RIMB 클라이언트 포트 인터페이스
  • RIMB 서버 포트 인터페이스
RIMB 인터페이스에는 다음과 같은 기능이 있습니다.
  • 송신기 또는 수신기 인터페이스에서 속성 및 오퍼레이션 매개변수를 입력하고 클라이언트 또는 서버 인터페이스에서 오퍼레이션 매개변수를 입력합니다. 입력 속성 및 오퍼레이션 매개변수는 AR 데이터 요소 유형이 일치하는 C 유형과 호환 가능해야 합니다.
  • 송신기 또는 수신기 인터페이스에서 Rhapsody 이벤트와 함께 속성을 입력하며 Rhapsody 이벤트에서 해당 속성을 입력해야 합니다. Rhapsody에서 생성된 헬퍼 함수도 해당 Rhapsody 이벤트를 생성하며 데이터 자체가 선택적 매개변수입니다. 이와 같은 Rhapsody 이벤트를 사용하여 RIMB의 상태 차트에서 상태 전이를 트리거합니다. Rhapsody 이벤트에는 매개변수가 없거나 연결할 AR 데이터 요소 유형과 C 유형 호환 가능한 하나의 매개변수가 있습니다. 제공되는 헬퍼 함수를 통해 Rhapsody 이벤트를 원활하게 처리할 수 있습니다.
  • 인터페이스 유형에 따라 다르고 추가 정보가 필요한 액세스 모드를 지정합니다.
    • 수신기 인터페이스: 속성 탭에서 속성마다 액세스 모드를 지정해야 합니다. 액세스 모드의 값은 다음과 같습니다.
      • 명시적 블로킹 - 값이 수신될 때까지 차단하는 AR 명시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 활성 요소에 데이터 수신 이벤트의 활성화 정책이 있을 수 없습니다.

      • 명시적 비블로킹 - 상태 코드와 함께 즉시 리턴하는 AR 명시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 활성 요소에 데이터 수신 이벤트에서 시작의 활성화 정책이 있을 수 없습니다.

      • 암시적 - AR 암시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 하나의 활성 요소가 액세스해야 합니다.

  • 다음 정보가 필요한 호출 모드를 지정합니다.
    • 오퍼레이션 탭에서 오퍼레이션마다 호출 모드를 지정해야 하는 클라이언트 인터페이스. 호출 모드의 특성은 다음 중 하나입니다.
      • 동기 – 서버가 오퍼레이션을 완료할 때까지 호출이 차단됩니다.

      • 비동기 – 호출이 즉시 리턴됩니다.

    “비동기 서버 호출에서 이벤트 리턴” 활성화 정책이 있는 다른 활성 오퍼레이션을 사용하여 작성된 매개변수 값을 검색할 수 있습니다.

RIMB 활성 오퍼레이션 - 탭에서 AR 실행 가능 엔티티를 정의합니다. 상태 차트 실행을 포함하여 RIMB에 정의된 모든 동작을 활성 오퍼레이션에서 활성화(호출)해야 합니다. 모든 코드로 활성 오퍼레이션을 구현할 수 있습니다. 활성 오퍼레이션 탭 기본 기능은 다음과 같습니다.
  • 송신기 또는 수신기 인터페이스의 DataElements 및 클라이언트 또는 서버 인터페이스의 오퍼레이션에 액세스합니다. 액세스 및 활성화 탭을 기반으로 액세스를 정의합니다.

  • 활성화 정책이 RTE 스케줄러가 해당 오퍼레이션을 활성화하는 시기를 판별합니다. 값은 다음 중 하나입니다.

    비동기 활성화 정책 - 액세스 및 활성화 탭을 기반으로 활성화를 정의합니다.

    주기적 활성화 정책 - 기간 및 오프셋을 정의합니다.

  • 보호됨 - 보호된 활성 오퍼레이션은 상호 배타적입니다. 모든 보호된 활성 오퍼레이션이 “내부에서 실행”으로 지정된 전용 AR 독점 영역으로 구현됩니다.
RIMB 액세스 및 활성화 - 이 탭에서는 관련 내부 동작 아티팩트를 정의합니다.
  • 액세스 - 데이터 읽기/쓰기 액세스, 데이터 송신/수신 위치, 서버 동기 또는 비동기 호출 위치, 대기 위치 등의 활성 요소가 액세스하는 포트의 요소. 암시적 또는 명시적 액세스 모드는 여기가 아니라 RIMB 인터페이스의 속성 레벨에서 지정됩니다.

  • 활성화 - 비동기 활성 요소의 활성화 정책을 나타냅니다. 타이밍 이벤트 외에 각 비동기 활성 요소를 활성화시키는 RTE 이벤트를 정의합니다. 행에서 (추가) 액세스를 정의하는 경우 활성화는 “N/A”입니다.

참고: 활성화 정책이 “데이터 수신 이벤트” 또는 “데이터 수신 이벤트에서 시작”인 경우 행에서 데이터 요소에 대한 액세스 및 활성화 정책을 모두 정의합니다. 주어진 활성 요소는 테이블에서 둘 이상의 행을 가질 수 있습니다. 이런 경우 정의된 활성화 정책 및 액세스는 모든 행의 합계입니다.

RIMB 동시성활성(기본값)이거나 순차입니다. 동시성이 “활성”인 경우 RIMB의 “doExecute” 메소드에서 사용할 수 있도록 RunnableEntity가 작성됩니다. RTE가 RIMB의 “doExecute” 메소드를 활성화하는 경우를 판별하는 활성화 정책을 지정해야 합니다. 활성화 정책은 “비동기”이거나 “주기적”입니다. “비동기” 활성화 정책은 “액세스 및 활성화” 탭을 기반으로 정의됩니다. “주기적” 활성화 정책은 기간 및 오프셋이 정의되는 경우입니다. 동시성이 “순차”인 경우 명시적인 활성화가 정의되지 않습니다. RIMB가 실행 관리자로 정의된 경우 RIMB는 상태 차트가 있는 경우 이 상태 차트 및 해당 파트를 관리하는 “doExecute” 메소드를 구현하고 이벤트 큐를 소유합니다.

생성된 헬퍼 함수

Rhapsody는 RIMB에서 사용할 몇 가지 유형의 헬퍼 함수를 생성할 수 있습니다. 활성 오퍼레이션에서 헬퍼 함수를 호출할 수 있으며 헬퍼 함수는 RTE API의 복잡도 및 특이성을 숨기고 receiveAndHandleP_x와 같은 추가 서비스를 활용할 수 있도록 합니다. 헬퍼 함수에는 다음이 포함됩니다.
  • 수신기 - 수신기 포트에서 데이터를 읽습니다. 사용자의 코드를 변경하지 않고 액세스 모드를 변경할 수 있도록 허용하는 경우도 있습니다.

  • 송신기 - 송신기 포트에서 데이터를 보냅니다.

  • 핸들러 - 수신된 데이터를 처리합니다.

  • 수신 및 처리 - 수신과 처리의 영향을 결합합니다.

  • 호출자 - 필수 클라이언트 서비스를 호출합니다.

  • 수신기, 송신기, 수신 및 처리와 호출자 - RTE API 상태를 리턴합니다.

표 1.
생성된 헬퍼 함수 설명

receiveData_p_x (int* const x)

수신기 포트 p에서 속성 x의 값을 읽어 매개변수 x에 넣습니다. 이벤트가 아니라 C 유형에서 p.x를 입력하는 경우에만 생성됩니다.

handleData_p_x (int x)

이벤트가 아니라 c 유형에서 p.x를 입력하는 경우에만 생성됩니다.
  • RIMB에 트리거된 오퍼레이션 evP_x가 있는 경우 이를 호출합니다.

  • RIMB에 속성 p_x.가 있는 경우 이를 매개변수의 값으로 설정합니다.

  • RIMB에 chP_x라는 수신 외에 변경된 x가 있는 경우에는 Rhapsody 이벤트 chP_x를 생성하고 이를 관리자의 큐에 넣습니다.

receiveAndHandleData_p_x()

즉시 수신되고 처리됩니다. 코드는 인라인입니다. 예를 들면, 두 개의 추가 함수 호출을 암시하지 않습니다.

receiveEvent_p_x (int* const x)

수신기 포트 p에서 속성 x의 값을 읽어 매개변수 x에 넣습니다. Rhapsody 이벤트에서 p.x를 입력하는 경우에만 생성됩니다. receiveAndHandleEvent를 직접 호출하는 것이 좋습니다.

handleEvent_p_x()

이벤트에서 p.x를 입력하는 경우에만 생성됩니다.
  • RIMB에 ev가 수신되는 경우에는 Rhapsody 이벤트 ev를 생성하고 이를 관리자의 큐에 넣습니다.

  • p.x를 입력하는 이벤트에 매개변수가 있는 경우에는 handleEvent에 이벤트에 복사된 매개변수가 있습니다.

receiveAndHandleEvent_p_x()

즉시 수신되고 처리됩니다. 코드는 인라인입니다. 예를 들면, 두 개의 추가 함수 호출을 암시하지 않습니다.

sendData_p_x(int x)

매개변수의 값을 송신기 포트 p의 속성 x에 보냅니다. 이벤트가 아니라 C 유형에서 p.x를 입력하는 경우에만 생성됩니다.

sendEvent_p_x()

이벤트 ev에서 p.x를 입력하는 경우에만 생성됩니다.
  • ev에 매개변수가 있는 경우 sendEvent에도 전송될 매개변수가 있습니다.

  • ev에 매개변수가 없는 경우에는 임의의 값을 보냅니다.

call_p_f

클라이언트 포트 p에서 오퍼레이션 f를 호출해야 합니다.

시간 처리

제한시간 구현은 다음과 같습니다.
  • 두 개의 실행 가능 엔티티:

    TimeTick - 타임 증분을 담당합니다.

    PostTimedElements - 만기된 제한시간 게시를 담당합니다. mxf/RiCTimer.c에서 구현됩니다.

  • 두 개의 타이밍 이벤트:

    TimeTick_tmev, PostTimedElements_tmev - 위의 실행 가능 엔티티를 주기적으로 트리거하는 데 사용됩니다.

  • 하나의 독점 영역:

    TimerManager_EA - 시간 카운터에 상호 배타적으로 액세스하도록 합니다. mxf API에서 호출한 RiCOSTimerManagerMutex_lock() 및 RiCOSTimerManagerMutex_free()를 통해 이 독점 영역 시작 및 종료를 수행합니다.

모든 아티팩트는 ARXML에 선언됩니다.

RIMB의 상태 차트

생성된 수신기, 송신기 및 핸들러에서 Rhapsody 이벤트를 원활하게 처리할 수 있습니다. RIMB의 상태 차트는 다음 두 가지 모드 중 하나로 실행됩니다.

RTE 관리 모드에서 실행할 수 있도록 RIMB의 상태 차트를 정의합니다.
  • RIMB를 “순차”로 정의하십시오.

  • RIMB 수신기 포트 p에서 수신될 때 상태 전이를 트리거하는 속성 x마다 evP_x라는 이름으로 트리거된 오퍼레이션을 정의하십시오.

  • x의 액세스 모드는 명시적 블로킹 또는 명시적 비블로킹(즉, 암시적이 아님)이어야 하며 일반 C 유형(예를 들면, Rhapsody 이벤트가 아님)을 통해 입력되어야 합니다.

  • 트리거된 오퍼레이션을 상태 전이 트리거로 사용하여 상태 차트를 작성하십시오.

  • 각 해당 p.x에 대해 활성 오퍼레이션을 정의하여 p.x디스패처로 제공하십시오.

  • 활성 오퍼레이션의 구현에서는 receiveAndHandleP_x()를 호출해야 합니다.

    이 단계는 RTE 관리 및 Rhapsody 관리 모드와 동일합니다. receiveAndHandleP_x()와 관련하여 Rhapsody에서 생성되는 코드는 다릅니다.

  • 상태 차트의 모든 디스패처를 “보호됨”으로 표시하여 개별 실행 가능 엔티티에서 활성화하는 디스패처가 상호 배타적이 되도록 하십시오.

Rhapsody 관리 모드에서 실행할 수 있도록 RIMB의 상태 차트를 정의합니다.
  • RIMB를 “주기적” 실행 정책이 있는 “활성”으로 정의하십시오.

  • Rhapsody 이벤트를 사용하여 RIMB 수신기 인터페이스 입력 포트에 대한 속성을 입력하십시오.

  • 수신기 포트 p에 AR 데이터 요소 x가 수신되면 이벤트 큐에 ev 이벤트 추가가 트리거됩니다.

  • ev가 포트 p의 RIMB 수신기 인터페이스에 x를 입력해야 합니다.

  • ev는 p.x의 이름이 아니라 상태 차트에 있는 이벤트의 이름입니다.

  • evx를 입력하면 evp.x에 바인딩됩니다.

  • Rhapsody 이벤트 ev를 상태 전이 트리거로 사용하여 상태 차트를 작성하십시오.

  • 각 해당 p.x에 대해 활성 오퍼레이션을 정의하여 p.x의 폴링으로 제공하십시오.

  • 활성 오퍼레이션의 구현에서는 receiveAndHandleP_x()를 호출합니다.

    이 단계는 RTE 관리 및 Rhapsody 관리 모드와 동일합니다. receiveAndHandleP_x()와 관련하여 Rhapsody에서 생성되는 코드는 다릅니다.


피드백