주요 콘텐츠

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

Embedded Coder 빠른 시작을 사용하여 코드 생성

ComponentDeploymentFcnInitialize FunctionTerminate Function 블록을 사용하여 시작 및 종료 동작을 표현하고 두 개의 Function-Call Subsystem을 사용하여 컴포넌트 알고리즘을 표현하는 간단한 함수 내보내기 모델입니다. 임베디드 코드 생성을 위해 Embedded Coder® 빠른 시작을 사용하여 ComponentDeploymentFcn을 준비합니다. 이 툴은 사용자의 목표와 애플리케이션에 따라 코드 생성 설정을 선택합니다.

빠른 시작 툴을 사용한 코드 생성

  1. 다음 명령을 입력하여 ComponentDeploymentFcn 모델을 엽니다.

    openExample('ecoder/GenerateCServiceInterfaceCodeFromComponentModelExample',... 
      'supportingFile', 'ComponentDeploymentFcn.slx');

    Export function model that includes an Initialize Function block, Terminate Function block, an triggered function-call subsystem, and a periodic function-call subsystem.

  2. C 코드 탭이 아직 열려 있지 않으면 앱 갤러리의 코드 생성에서 Embedded Coder를 클릭합니다.

  3. C 코드 탭에서 빠른 시작을 클릭합니다.

    Embedded Coder Quick Start display for model ComponentDeploymentFcn.

  4. 빠른 시작 툴의 단계를 진행하다가 코드 생성 단계에서 멈춥니다. 각 단계에서 사용자가 생성하려는 코드에 대한 질문이 제기됩니다. 이 튜토리얼에서는 이미 선택된 디폴트 설정을 사용합니다. 이 툴은 모델에 대한 선택 사항을 검증하고 코드 생성에 필요한 파라미터 변경 사항을 제시합니다.

  5. 코드 생성 단계에서는 제안된 변경 사항을 적용하고 다음을 클릭하여 ComponentDeploymentFcn에서 코드를 생성합니다.

    코드 생성 완료 페이지는 다음 단계로 나아갈 수 있는 방법을 제시하고 해당 툴이 서비스 코드 인터페이스를 적용하는 코드 생성 모델을 구성했음을 알려줍니다. 서비스 인터페이스 구성은 모델 데이터 요소를 모델에 대해 구성된 공유 Embedded Coder 사전에 정의되어 저장된 서비스 인터페이스에 매핑합니다.

  6. 마침을 클릭합니다.

  7. Embedded Coder 앱에서 C 코드 탭으로 돌아갑니다. 이 탭에서 코드 생성 사용자 지정을 구성하고 코드 보기에서 결과를 확인할 수 있습니다.

    View of the ComponentDeploymentFcn model in context of Embedded Coder app. The toolstrip is at the top. The model is in the middle. The Code view is on the right.

생성된 코드 검사하기

생성된 코드는 ComponentDeploymentFcn.c, ComponentDeploymentFcn.h, services.h라는 세 개의 기본 파일에 나타납니다. 현재 폴더인 MATLAB®ComponentDeploymentFcn_ert_rtw 폴더에는 ComponentDeploymentFcn.cComponentDeploymentFcn.h 파일이 들어 있습니다. 타깃 플랫폼 서비스에 대한 함수 프로토타입을 지정하는 헤더 파일인 services.h 파일은 services 폴더에 있습니다.

slprj/ert/_sharedutils 폴더에는 rtwtypes.h 파일이 들어 있는데, 이 파일은 생성된 코드에서 기본적으로 사용하는 표준 데이터형을 정의합니다. 이 폴더에는 여러 모델 간에 공유될 수 있거나 공유되어야 하는 생성된 파일이 들어 있습니다.

ComponentDeploymentFcn.hComponentDeploymentFcn.c 파일은 애플리케이션 코드에서 호출하는 진입점 함수를 선언하고 정의합니다. 이 예제 모델의 경우 진입점 함수에는 초기화 함수, 두 개의 실행 함수, 종료 함수가 포함됩니다. 이러한 함수는 사용자가 구성한 서비스 인터페이스를 통해 타깃 애플리케이션 코드와 데이터를 교환합니다. services.h 파일은 생성된 진입점 함수가 타깃 플랫폼 서비스를 호출하는 데 사용하는 인터페이스를 선언하는 헤더 파일입니다.

생성된 코드에서 진입점 함수를 보려면:

  1. Simulink® 편집기 창의 오른쪽에 있는 코드 보기에서 검색 표시줄을 찾습니다.

  2. 검색 표시줄을 클릭하고 Function-Call Subsystem Accumulator에 대해 생성된 진입점 함수의 이름인 CD_accumulator를 선택합니다.

    The string CD_integrator appears in the Code view search field and the response shows that Code view found an instance of the function name CD_integrator.

  3. ComponentDeploymentFcn.c에서 진입점 함수 CD_accumulator에 대해 생성된 코드를 검사합니다.

    void CD_accumulator(void)
    {
      const real_T *tmpDataTransferIRead;
      real_T rtb_Sum_0;
      int32_T i;
     
      tmpDataTransferIRead = get_CD_accumulator_DataTransfer();
    
      for (i = 0; i < 10; i++) {
        rtb_Sum_0 = tmpDataTransferIRead[i] + CD_measured.delay[i];
        (getref_CD_accumulator_OutBus_y())[i] = CD_tunable.k * rtb_Sum_0;
        CD_measured.delay[i] = rtb_Sum_0;
      }
    }

    진입점 함수는 적분기 함수에서 전송된 출력 값을 읽기 위해 데이터 전송 서비스 함수 get_CD_accumulator_DataTransfer를 호출합니다. 버스 신호의 각 요소에 대해 이 함수는 지연 및 이득 값을 적용하고 타깃 플랫폼 전송자 서비스 함수 getref_CD_accumulator_OutBus_y를 호출하여 출력을 작성합니다. 코드 생성기가 서비스 호출에 적용하는 데이터 통신 방법과 함수 이름은 코드 매핑 편집기에서 선택한 서비스 인터페이스에 의해 정의됩니다. 기본적으로 코드 매핑은 함수 실행 중이 아닐 때에(즉, 함수 실행 전후에) 발생하는 데이터 통신을 위해 구성된 서비스 인터페이스를 지정하고 데이터 동시성 보호 기능을 적용합니다. 입력 데이터의 값은 함수 실행에 따라 변경되지 않으며 그대로 유지됩니다. 함수가 데이터에 액세스할 때마다 코드는 동일한 값을 사용합니다. 이러한 데이터 통신 방식은 데이터 최신성보다 메모리 최적화를 우선시합니다.

  4. 코드 보기에서 오른쪽에 있는 화살표를 사용하여 CD_accumulator의 각 인스턴스를 단계별로 살펴봅니다. 여기에는 ComponentDeploymentFcn.c의 함수 정의와 ComponentDeploymentFcn.h의 선언이 포함됩니다. 파일 메뉴에서 각 파일에서의 검색 적중 횟수도 볼 수 있습니다.

    Code view display of search hit count for each generated code file.

  5. 검색 단계를 반복하여 다른 진입점 함수의 인스턴스를 찾아 탐색합니다.

다음으로, 서비스 인터페이스 구성을 변경하고 생성된 코드의 차이점을 검토합니다.