주요 콘텐츠

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

인라인 S-Function의 코드 효율성 및 통합성 향상

TLC(Target Language Compiler) 블록 인터페이스는 Simulink® 코드 생성 인프라의 핵심 구성요소입니다. 이는 S-Function 블록의 코드 생성 구현에서 사용되는 일련의 함수와 레코드입니다. .tlc 파일을 사용하여 S-Function 블록에 대한 코드를 생성할 수 있습니다. 이 상위 수준 다이어그램은 TLC 블록 인터페이스가 코드 생성 프로세스에서 어디에 위치하는지 보여줍니다. 블록 다이어그램을 고품질 코드로 변환하는 방법에 대한 자세한 내용은 Target Language Compiler 기본 사항를 참조하십시오.

TLC 블록 인터페이스는 Simulink Coder™의 백엔드에 통합되어 있습니다. 백엔드에 배치되면 실행이 지연되어 여러 가지 제약 사항이 발생합니다. 또한 Simulink Coder 최적화 변환의 상당수가 중간 단계에서 수행된다는 점 때문에 그 영향은 제한적입니다.

향상된 TLC 블록 인터페이스

향상된 TLC 블록 인터페이스는 Simulink Coder 최적화 단계에서 S-Function 블록 TLC 구현을 도입합니다. 이러한 인프라 변경을 통해 S-Function 블록 코드가 모델의 생성된 코드에 보다 효과적으로 통합될 수 있게 되어, 최적화 및 사용자 지정 기능이 강화되면서 코드 효율성이 향상됩니다.

이 그림은 (a) TLC 블록 인터페이스와 (b) 향상된 TLC 블록 인터페이스를 사용하는 경우의 Simulink Coder 아키텍처를 보여줍니다.

The image illustrates the Simulink Coder architecture in the TLC block interface and the enhanced TLC block interface

S-Function 블록과 Simulink Coder 최적화 단계 간의 호환성은 .tlc 파일을 통해 지정되어야 합니다. 이 향상된 TLC 블록 인터페이스는 다음과 같은 이점을 제공합니다:

  • 생성된 코드에서 S-Function 블록의 입력 및 출력에 대한 버퍼 할당 개선

  • S-Function 블록에 대해 생성된 코드의 인라인 처리 개선

  • for-loop 반복 과정에서 사용된 지역 변수의 재사용

  • 여러 릴리스 간 호환이 가능한, 보다 명확하게 정의된 TLC 라이브러리 함수 집합

향상된 TLC 블록 인터페이스는 Function-Call Subsystem 블록 내부에 TLC가 구현된 S-Function 블록과 Stateflow® 내부에 있는 Simulink 함수 블록에 대해, 더 효율적인 루프 생성 및 개선된 버퍼 할당을 포함한 최적화 기능을 활용합니다.

향상된 TLC 블록 인터페이스 활성화

향상된 TLC 블록 인터페이스를 활성화하려면 블록 및 타깃 TLC 파일에 필요한 변경 사항을 적용하십시오.

블록 TLC 파일

BlockInstanceSetup에서 LibEnableBlockFcnOptimizations를 호출하여(Block Target File Methods 참조) S-Function에 대한 향상된 TLC 블록 인터페이스를 활성화하십시오.

%function BlockInstanceSetup(block, system) void
%<LibEnableBlockFcnOptimizations(block)>
%endfunction

타깃 TLC 파일

타깃 TLC 파일에서는 시스템 타깃 파일의 앞부분, 즉 %include 문보다 앞서 전역 변수 선언의 일부로 PreCodeGenExecCompliant 변수를 정의해야 합니다. 이 배치 방식은 코드 생성을 위한 빌드 설정을 초기화하기 전에 TLC가 해당 변수를 읽고 평가하도록 보장합니다. PreCodeGenExecCompliant를 조기에 정의하지 않으면, rtwgensettings에서 제외됩니다. rtwgensettings에 대한 정보는 rtwgensettings Structure를 참조하십시오.

다음으로, 타깃에 codegenentry.tlc가 포함되어 있는지 확인하십시오.

  • 사례 1 – 타깃에 codegenentry.tlc가 포함되어 있으며 사용자 지정 TLC 코드는 포함되어 있지 않은 경우:

    rtw/c/tlc/grt/grt.tlc의 이 예시와 같이 전역 변수 PreCodeGenExecCompliant를 정의하십시오.

    %assign TargetRegistSynchroOp = 1
    %assign PreCodeGenExecCompliant = 1
    
    %include "codegenentry.tlc"

  • 사례 2 – 타깃에 codegenentry.tlc가 포함되어 있으며 사용자 지정 TLC 코드가 포함된 경우:

    다음은 codegenentry.tlc 및 사용자 지정 TLC 코드가 포함된 사용자 지정 타깃 TLC 파일의 구조를 보여줍니다:

    %%% START global TLC variable declaration
    ...
    %%% END global TLC variable declaration
    %%% START custom TLC target code
    ...
    %include "codegenentry.tlc"
    ...
    %%% END custom TLC target code

    이 코드에서는 matlab/rtw/c/raccel/raccel.tlc의 예시에서 볼 수 있듯이, Simulink Coder 최적화 단계 이전에 타깃 TLC 파일의 실행을 지원하기 위해 필요한 수정 사항을 확인할 수 있습니다.

    %%% START global TLC variable declaration
    %assign PreCodeGenExecCompliant = 1
    ...
    %%% END global TLC variable declaration
    %if EXISTS("::CompiledModel")
    %include "codegenentrylib.tlc"
    %if LibIsPreCodeGenPhase()
    %include "codegenentry.tlc"
    %else
    %%% START custom TLC target code
    ...
    %include "codegenentry.tlc"
    ...
    %%% END custom TLC target code
    %endif %% LibIsPreCodeGenPhase()
    %endif %% EXISTS("::CompiledModel")

  • 사례 3 – 타깃에 codegenentry.tlc가 포함되지 않은 경우:

    Simulink Coder 최적화 단계 전후로 실행되는 TLC 프로그램 간을 전환하는 코드를 포함하십시오. 이 예제는 codegenentry.tlc가 포함되지 않은 타깃 TLC 파일의 내용을 보여줍니다.

    %%% START global TLC variable declaration
    ...
    %%% END global TLC variable declaration
    %%% START custom TLC target code
    ...
    %%% END custom TLC target code

    이 코드에서는 rtw/c/rsim/rsim.tlc의 예시에서 볼 수 있듯이, Simulink Coder 최적화 단계 이전에 타깃 TLC 파일의 실행을 지원하기 위해 필요한 수정 사항을 확인할 수 있습니다.

    %%% START global TLC variable declaration
    %assign PreCodeGenExecCompliant = 1
    ...
    %%% END global TLC variable declaration
    %if EXISTS("::CompiledModel")
    %include "codegenentrylib.tlc"
    %if LibIsPreCodeGenPhase()
    %include "codegenentry.tlc"
    %else
    %%% START custom TLC target code
    ...
    %%% END custom TLC target code
    %endif %% LibIsPreCodeGenPhase()
    %endif %% EXISTS("::CompiledModel")

참고

빌드 오류를 방지하려면, 코드 생성을 위해 향상된 TLC 블록 인터페이스를 지원하도록 시스템 타깃 파일을 업데이트하십시오.

지원되는 함수

버전 간 호환성을 보장하기 위해 사용자 지정 TLC 코드에서 rtw/c/tlc/public_api의 문서화된 TLC 함수를 사용하십시오. rtw/c/tlc/private_api에서 문서화되지 않은 API의 사용은 피하십시오. 이러한 API는 향후 지원되지 않을 수 있습니다.

디버그 및 오류 처리

개선된 TLC 블록 인터페이스는 TLC 디버거, TLC 커버리지, TLC 어설션, TLC 프로파일러와 같은 디버깅 옵션은 물론, TLC 오류 처리 기능을 지원하며, .rtw 파일 유지 구성 파라미터를 사용하여 생성된 model.rtw 파일을 유지할 수 있도록 합니다.

Simulink Coder 최적화 단계에 포함된 TLC 블록 분석 단계는 별도의 TLC 프로세스로 작동합니다. 지정된 TLC 디버깅 옵션을 활성화하면, TLC 블록 분석 단계에서 실행되는 블록 TLC 코드를 독립적으로 디버깅할 수 있습니다. 구성 파라미터 대화 상자에서 고급 파라미터 아래의 코드 생성 창에서 다음 파라미터를 활성화하십시오.

  • 코드 생성 시 TLC 커버리지 시작 – 코드 실행 빈도를 추적하고, TLC 블록 분석 단계에서 얻은 커버리지 데이터를 타깃 TLC와 결합하여 단일 리포트로 작성합니다. 이 리포트는 코드 테스트 커버리지에 대한 포괄적인 개요를 제공합니다.

  • .rtw 파일 유지modelName_reduced.rtw 파일을 그대로 유지한 채, TLC 블록 분석 단계에 필요한 메타데이터가 포함된 새로운 파일 modelName_reduced.rtw를 생성합니다.

  • TLC 프로파일링 – TLC 코드에 대한 타이밍 통계를 수집하고, 블록 분석용 파일 modelName_frontend.html와 타깃 TLC용 파일 modelName.html를 생성합니다.

  • 코드 생성 시 TLC 디버거 시작 – 워크플로를 방해하지 않고 중단점을 설정하고, 변수를 확인하며, TLC 코드를 탐색하고, 생성된 코드의 오류를 수정할 수 있습니다.

  • TLC 어설션 활성화 – TLC 코드 내에서 오류가 발생하면 빌드 프로세스를 중단하고, .tlc 파일 내의 오류를 식별할 수 있는 TLC 스택 추적을 생성합니다.

참고 항목

도움말 항목