주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

서비스 인터페이스 구성

Embedded Coder®로 서비스 코드 인터페이스를 구성하여 코드 인터페이스 구성을 간소화합니다. 서비스 코드 인터페이스 구성은 다음에 대한 인터페이스를 지정합니다.

  • 외부 타깃 애플리케이션 코드가 호출할 수 있는 진입점 함수

  • 생성된 진입점 함수가 타깃 플랫폼 서비스를 호출하는 데 사용할 수 있는 액세스 함수 인터페이스

모델에 대해 구성된 공유 Embedded Coder 사전은 각 유형의 모델 인터페이스 요소(예: 함수, 인포트, 데이터 전송)에 대해 여러 개의 코드 인터페이스를 정의할 수 있습니다. 사전은 각 유형의 요소에 대한 디폴트 코드 인터페이스를 지정합니다. 디폴트 인터페이스를 적용하면 시간이 절약되고 코드에서 오류가 발생할 위험이 줄어듭니다. 특히 대규모 모델이나 다중 인스턴스 코드를 생성하는 모델의 경우 더욱 그렇습니다. 개별 함수와 데이터 요소에 대한 디폴트 설정을 선택적으로 재정의할 수 있습니다.

서비스 인터페이스 코드 매핑

코드 매핑 편집기 또는 코드 매핑 프로그래밍 인터페이스를 사용하여 모델 요소에 대한 코드 인터페이스 구성을 변경할 수 있습니다. 이러한 툴은 구성된 Embedded Coder 사전에 정의된 서비스 코드 인터페이스에 모델 인터페이스 요소를 매핑합니다. 이 예제에서는 코드 매핑 편집기를 사용하여 모델의 코드 매핑을 변경하는 방법을 보여줍니다.

아직 열지 않았다면 Embedded Coder 앱에서 예제 모델 ComponentDeploymentFcn을 여십시오. 그런 다음 코드 매핑 편집기에서 엽니다. Embedded Coder 앱에서 모델 다이어그램 아래에 있는 코드 매핑 - 컴포넌트 인터페이스를 클릭하십시오.

이 그림은 함수 탭이 선택된 코드 매핑 편집기를 보여줍니다. 나열된 진입점 함수는 외부 타깃 플랫폼 코드에서 호출될 수 있습니다. 진입점 함수에 대한 인터페이스 코드를 생성할 때 코드 생성기가 적용하는 함수 사용자 지정 템플릿과 함수 이름을 변경할 수 있습니다. 진입점 함수는 void-void 인터페이스를 갖습니다(즉, 이 함수들은 인수를 전달하지 않음). 타깃 플랫폼 서비스를 호출하여 외부 애플리케이션 코드와 데이터를 교환합니다.

Functions tab view of the Code Mappings editor for model ComponentDeploymentFcn.

모델 데이터 인터페이스 요소를 서비스 인터페이스에 매핑합니다. 인포트, 아웃포트, 데이터 전송, 파라미터, 데이터 저장소 및 신호에 대한 서비스 인터페이스를 구성하려면 해당 탭을 사용하십시오. 예를 들어, 코드 생성기가 인포트에 사용하는 인터페이스 정의를 변경하려면 인포트 탭을 선택합니다.

인포트, 아웃포트, 데이터 전송을 위한 각 인터페이스는 데이터 통신 방법(실행 중이 아닐 때, 실행 중일 때, 또는 직접 액세스)과 액세스 함수 명명 규칙을 지정합니다. 파라미터, 데이터 저장소, 신호 및 상태에 대한 인터페이스는 변수 조정이나 측정을 가능하게 하는 스토리지 클래스를 지정할 수 있습니다. 이러한 모델 데이터 요소를 조정 불가능 또는 측정 불가능으로 구성하는 옵션이 있습니다. 데이터 요소를 조정하거나 측정할 수 없는 경우, 코드 생성기는 관련 코드 최적화를 적용합니다.

타이머 서비스 인터페이스는 특정 주기적 및 비주기적 진입점 함수과 연결됩니다. 각 인터페이스는 데이터 통신 방법과 액세스 함수 명명 규칙을 지정합니다. 코드 생성기가 함수에 적용하는 타이머 서비스 인터페이스를 변경하려면 함수 탭에서 함수를 선택하고 연필 아이콘을 클릭하십시오. 나타나는 대화 상자에서 타이머 서비스 인터페이스를 선택하십시오.

디폴트 함수 이름 재정의

또 다른 인터페이스 사용자 지정은 구성된 Embedded Coder 사전의 함수 사용자 지정 템플릿에서 정의한 디폴트 진입점 함수 이름을 재정의하는 것입니다. 이 예제에서 코드 생성기는 기본적으로 함수 사용자 지정 템플릿 PeriodicAperiodicInterfaceInitTermInterface를 사용하며, 이는 함수 이름 CD_Aperiodic, CD_Periodic, CD_initialize, CD_terminate를 생성하는 명명 규칙을 적용합니다. 타깃 플랫폼이 실행 함수 CD_integratorCD_accumulator를 호출한다고 가정합니다. 타깃 환경 코드에 맞춰 정렬되도록 함수 이름 열에서 예제의 모델 코드 매핑은 함수 이름 CD_integratorCD_accumulator를 지정하고 있습니다. 이러한 이름은 디폴트 이름인 CD_AperiodicCD_Periodic을 재정의합니다.

대체 서비스 인터페이스 구성

모델 ComponentDeploymentFcn에 대한 코드 매핑은 외부 실행 데이터 통신을 사용하는 서비스 인터페이스를 적용합니다. 외부 실행 데이터 통신은 함수 실행 전과 후에 발생합니다. 입력 데이터의 값은 함수 실행에 따라 변경되지 않으며 그대로 유지됩니다. 함수가 데이터에 액세스할 때마다 코드는 동일한 값을 사용합니다.

서비스 요청에 대해 실행 중일 때의 데이터 통신 방법을 코드 생성기가 적용하도록 서비스 인터페이스 구성을 변경합니다. 가장 좋은 방법은 동일한 데이터 통신 방법을 사용하는 서비스 인터페이스를 사용하도록 모델의 데이터 요소를 구성하는 것입니다.

  1. Embedded Coder 앱에서 코드 매핑 편집기를 엽니다.

  2. 함수 탭을 클릭합니다.

  3. 비주기적 및 주기적 진입점 함수와 관련된 타이머 서비스 인터페이스를 변경합니다. 각 함수에 대해:

    1. 함수에 해당하는 행을 선택하십시오.

    2. 연필 아이콘을 클릭하십시오.

    3. 나타나는 대화 상자에서 Timer Serviceget_tick_during으로 설정합니다.

  4. 수신 서비스 인터페이스를 인포트로 변경합니다. 인포트 탭을 클릭하십시오. 각 인포트의 수신자 서비스 열에서 ReceiverDuringExe를 선택합니다.

  5. 아웃포트에 대한 전송자 서비스 인터페이스를 변경합니다. 아웃포트 탭을 클릭하십시오. 각 아웃포트의 전송자 서비스 열에서 SenderDuringExe를 선택합니다.

  6. 데이터 전송 서비스 인터페이스를 변경합니다. 데이터 전송 탭을 클릭하십시오. 데이터 전송을 위해 데이터 전송 열에서 DataTransferDuringExe를 선택합니다.

  7. 모델을 저장합니다.

생성된 코드 생성 및 검사

  1. 코드를 생성합니다.

  2. 코드 보기의 ComponentDeploymentFcn.c 파일에서 진입점 함수 CD_accumulator에 대해 생성된 코드를 검사합니다.

    void CD_accumulator(void)
    {
      real_T rtb_Sum[10];
      real_T rtb_Sum_0;
      int32_T i;
     
      get_CD_accumulator_DataTransfer(rtb_Sum);
    
      for (i = 0; i < 10; i++) {
        rtb_Sum_0 = rtb_Sum[i] + CD_measured.delay[i];
        rtb_Sum[i] = rtb_Sum_0;
        rtDwork.OutBus_y[i] = CD_tunable.k * rtb_Sum_0;
        CD_measured.delay[i] = rtb_Sum_0;
      }
      
      set_CD_accumulator_OutBus_y(&rtDwwork.OutBus_y[0]);
    }

    진입점 함수는 적분기 함수에서 전송된 출력 값을 읽기 위해 타깃 플랫폼 데이터 전송 서비스 함수 get_CD_accumulator_DataTransfer를 호출합니다. 버스 신호의 각 요소에 대해 이 함수는 지연 및 이득 값을 적용하고 타깃 플랫폼 전송자 서비스 함수 getref_CD_accumulator_OutBus_y를 호출하여 출력을 작성합니다. 코드 생성기가 서비스 호출에 적용하는 데이터 통신 방법과 함수 이름은 코드 매핑 편집기에서 선택한 서비스 인터페이스에 의해 정의됩니다. 사용자가 서비스 인터페이스 매핑을 함수 실행 중에 데이터 통신을 수행하고 데이터 동시성 보호 기능을 적용하는 인터페이스로 변경했습니다. 함수 실행 중에 데이터가 다른 함수에 즉시 전달됩니다. 함수가 데이터에 액세스할 때마다 코드는 업데이트된 값을 사용합니다. 이러한 데이터 통신 방식은 메모리 사용량보다 데이터의 최신성을 우선시합니다.

  3. 다른 진입점 함수에 대한 생성 코드에서의 차이점을 관찰합니다.

다음으로, 런타임 중의 조정을 위해 모델 파라미터를 구성하고 런타임 중의 측정을 위해 상태 데이터를 구성합니다.