명시적 블로킹 - 값이 수신될 때까지 차단하는 AR 명시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 활성 요소에 데이터 수신 이벤트의 활성화 정책이 있을 수 없습니다.
명시적 비블로킹 - 상태 코드와 함께 즉시 리턴하는 AR 명시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 활성 요소에 데이터 수신 이벤트에서 시작의 활성화 정책이 있을 수 없습니다.
암시적 - AR 암시적 액세스를 의미합니다. 액세스 및 활성화 탭에서 하나의 활성 요소가 액세스해야 합니다.
동기 – 서버가 오퍼레이션을 완료할 때까지 호출이 차단됩니다.
비동기 – 호출이 즉시 리턴됩니다.
“비동기 서버 호출에서 이벤트 리턴” 활성화 정책이 있는 다른 활성 오퍼레이션을 사용하여 작성된 매개변수 값을 검색할 수 있습니다.
송신기 또는 수신기 인터페이스의 DataElements 및 클라이언트 또는 서버 인터페이스의 오퍼레이션에 액세스합니다. 액세스 및 활성화 탭을 기반으로 액세스를 정의합니다.
활성화 정책이 RTE 스케줄러가 해당 오퍼레이션을 활성화하는 시기를 판별합니다. 값은 다음 중 하나입니다.
비동기 활성화 정책 - 액세스 및 활성화 탭을 기반으로 활성화를 정의합니다.
주기적 활성화 정책 - 기간 및 오프셋을 정의합니다.
액세스 - 데이터 읽기/쓰기 액세스, 데이터 송신/수신 위치, 서버 동기 또는 비동기 호출 위치, 대기 위치 등의 활성 요소가 액세스하는 포트의 요소. 암시적 또는 명시적 액세스 모드는 여기가 아니라 RIMB 인터페이스의 속성 레벨에서 지정됩니다.
활성화 - 비동기 활성 요소의 활성화 정책을 나타냅니다. 타이밍 이벤트 외에 각 비동기 활성 요소를 활성화시키는 RTE 이벤트를 정의합니다. 행에서 (추가) 액세스를 정의하는 경우 활성화는 “N/A”입니다.
RIMB 동시성은 활성(기본값)이거나 순차입니다. 동시성이 “활성”인 경우 RIMB의 “doExecute” 메소드에서 사용할 수 있도록 RunnableEntity가 작성됩니다. RTE가 RIMB의 “doExecute” 메소드를 활성화하는 경우를 판별하는 활성화 정책을 지정해야 합니다. 활성화 정책은 “비동기”이거나 “주기적”입니다. “비동기” 활성화 정책은 “액세스 및 활성화” 탭을 기반으로 정의됩니다. “주기적” 활성화 정책은 기간 및 오프셋이 정의되는 경우입니다. 동시성이 “순차”인 경우 명시적인 활성화가 정의되지 않습니다. RIMB가 실행 관리자로 정의된 경우 RIMB는 상태 차트가 있는 경우 이 상태 차트 및 해당 파트를 관리하는 “doExecute” 메소드를 구현하고 이벤트 큐를 소유합니다.
수신기 - 수신기 포트에서 데이터를 읽습니다. 사용자의 코드를 변경하지 않고 액세스 모드를 변경할 수 있도록 허용하는 경우도 있습니다.
송신기 - 송신기 포트에서 데이터를 보냅니다.
핸들러 - 수신된 데이터를 처리합니다.
수신 및 처리 - 수신과 처리의 영향을 결합합니다.
호출자 - 필수 클라이언트 서비스를 호출합니다.
수신기, 송신기, 수신 및 처리와 호출자 - RTE API 상태를 리턴합니다.
| 생성된 헬퍼 함수 | 설명 |
|---|---|
receiveData_p_x (int* const x) |
수신기 포트 p에서 속성 x의 값을 읽어 매개변수 x에 넣습니다. 이벤트가 아니라 C 유형에서 p.x를 입력하는 경우에만 생성됩니다. |
handleData_p_x (int x) |
이벤트가 아니라 c 유형에서 p.x를 입력하는 경우에만
생성됩니다.
|
receiveAndHandleData_p_x() |
즉시 수신되고 처리됩니다. 코드는 인라인입니다. 예를 들면, 두 개의 추가 함수 호출을 암시하지 않습니다. |
receiveEvent_p_x (int* const x) |
수신기 포트 p에서 속성 x의 값을 읽어 매개변수 x에 넣습니다. Rhapsody 이벤트에서 p.x를 입력하는 경우에만 생성됩니다. receiveAndHandleEvent를 직접 호출하는 것이 좋습니다. |
handleEvent_p_x() |
이벤트에서 p.x를 입력하는 경우에만 생성됩니다.
|
receiveAndHandleEvent_p_x() |
즉시 수신되고 처리됩니다. 코드는 인라인입니다. 예를 들면, 두 개의 추가 함수 호출을 암시하지 않습니다. |
sendData_p_x(int x) |
매개변수의 값을 송신기 포트 p의 속성 x에 보냅니다. 이벤트가 아니라 C 유형에서 p.x를 입력하는 경우에만 생성됩니다. |
sendEvent_p_x() |
이벤트 ev에서 p.x를 입력하는 경우에만 생성됩니다.
|
call_p_f |
클라이언트 포트 p에서 오퍼레이션 f를 호출해야 합니다. |
두 개의 실행 가능 엔티티:
TimeTick - 타임 증분을 담당합니다.
PostTimedElements - 만기된 제한시간 게시를 담당합니다. mxf/RiCTimer.c에서 구현됩니다.
두 개의 타이밍 이벤트:
TimeTick_tmev, PostTimedElements_tmev - 위의 실행 가능 엔티티를 주기적으로 트리거하는 데 사용됩니다.
하나의 독점 영역:
TimerManager_EA - 시간 카운터에 상호 배타적으로 액세스하도록 합니다. mxf API에서 호출한 RiCOSTimerManagerMutex_lock() 및 RiCOSTimerManagerMutex_free()를 통해 이 독점 영역 시작 및 종료를 수행합니다.
생성된 수신기, 송신기 및 핸들러에서 Rhapsody 이벤트를 원활하게 처리할 수 있습니다. RIMB의 상태 차트는 다음 두 가지 모드 중 하나로 실행됩니다.
RTE 관리 - AR 수신기 포트에 수신되는 데이터 요소가 트리거된 오퍼레이션으로 변환됩니다. 데이터 요소가 수신되면 RTE가 상태 차트에서 상태 전이를 직접 트리거하는 해당 활성 오퍼레이션을 호출합니다. RIMB는 순차적일 수 있으며 활성 또는 실행 관리자도 아니고 Rhapsody 이벤트가 필요하지 않습니다. 이 모드에서는 AR 데이터 요소의 수신으로 인해 발생하는 트리거된 오퍼레이션만 상태 차트에서 상태 전이를 트리거할 수 있습니다. RiCGEN 호출은 허용되지 않습니다.
Rhapsody 관리 - AR 수신기 포트에 수신되는 데이터 요소가 Rhapsody 이벤트로 변환됩니다. 데이터 요소가 수신되면 해당 Rhapsody 이벤트를 RIMBO의 이벤트 큐에 넣는 활성 오퍼레이션이 호출됩니다. RIMB는 활성-주기적이어야 하고 실행 관리자여야 합니다. doExecute는 주기적으로 실행되고 Rhapsody 메커니즘을 모방하여 이벤트를 하나씩 상태 차트에 디스패치합니다.
RIMB를 “순차”로 정의하십시오.
RIMB 수신기 포트 p에서 수신될 때 상태 전이를 트리거하는 속성 x마다 evP_x라는 이름으로 트리거된 오퍼레이션을 정의하십시오.
x의 액세스 모드는 명시적 블로킹 또는 명시적 비블로킹(즉, 암시적이 아님)이어야 하며 일반 C 유형(예를 들면, Rhapsody 이벤트가 아님)을 통해 입력되어야 합니다.
트리거된 오퍼레이션을 상태 전이 트리거로 사용하여 상태 차트를 작성하십시오.
각 해당 p.x에 대해 활성 오퍼레이션을 정의하여 p.x의 디스패처로 제공하십시오.
활성 오퍼레이션의 구현에서는 receiveAndHandleP_x()를 호출해야 합니다.
이 단계는 RTE 관리 및 Rhapsody 관리 모드와 동일합니다. receiveAndHandleP_x()와 관련하여 Rhapsody에서 생성되는 코드는 다릅니다.
상태 차트의 모든 디스패처를 “보호됨”으로 표시하여 개별 실행 가능 엔티티에서 활성화하는 디스패처가 상호 배타적이 되도록 하십시오.
RIMB를 “주기적” 실행 정책이 있는 “활성”으로 정의하십시오.
Rhapsody 이벤트를 사용하여 RIMB 수신기 인터페이스 입력 포트에 대한 속성을 입력하십시오.
수신기 포트 p에 AR 데이터 요소 x가 수신되면 이벤트 큐에 ev 이벤트 추가가 트리거됩니다.
ev가 포트 p의 RIMB 수신기 인터페이스에 x를 입력해야 합니다.
ev는 p.x의 이름이 아니라 상태 차트에 있는 이벤트의 이름입니다.
ev가 x를 입력하면 ev가 p.x에 바인딩됩니다.
Rhapsody 이벤트 ev를 상태 전이 트리거로 사용하여 상태 차트를 작성하십시오.
각 해당 p.x에 대해 활성 오퍼레이션을 정의하여 p.x의 폴링으로 제공하십시오.
활성 오퍼레이션의 구현에서는 receiveAndHandleP_x()를 호출합니다.
이 단계는 RTE 관리 및 Rhapsody 관리 모드와 동일합니다. receiveAndHandleP_x()와 관련하여 Rhapsody에서 생성되는 코드는 다릅니다.