주요 콘텐츠

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

sl_customization.m를 사용하여 빌드 프로세스 사용자 지정하기

Simulink® 사용자 지정 파일인 sl_customization.m는 MATLAB®를 사용하여 빌드 프로세스 인터페이스를 사용자 지정할 수 있게 해주는 메커니즘입니다. Simulink 소프트웨어는 시작 시 MATLAB 경로에 sl_customization.m 파일이 존재하면 이를 읽어들이며, 해당 파일에 지정된 사용자 지정 설정이 Simulink 세션에 적용됩니다. sl_customization.m 사용자 지정 파일에 대한 자세한 내용은 Register Customizations with Simulink를 참조하십시오.

sl_customization.m 파일

sl_customization.m 파일은 빌드 과정에서 호출될 설치 환경별 후크 함수를 레지스터하는 데 사용할 수 있습니다. sl_customization.m를 통해 레지스터하는 후크 함수는 시스템 타깃 파일(STF) 후크(Customize Build Process with STF_make_rtw_hook File에 설명됨) 및 코드 생성 후 명령어(Customize Post-Code-Generation Build Processing에 설명됨)를 보완합니다.

다음 그림은 설치 수준 후크와 빌드 프로세스를 사용자 지정하기 위해 사용할 수 있는 다른 메커니즘들 간의 관계를 보여줍니다.

sl_customization.m을 사용하여 빌드 프로세스 후크 함수 레지스터하기

빌드 과정에서 호출되는 설치 수준 후크 함수를 레지스터하려면, MATLAB라는 이름의 sl_customization.m 함수를 생성한 다음, 사용자 지정하려는 Simulink 설치의 MATLAB 경로에 이 함수를 포함시켜야 합니다. sl_customization 함수는 하나의 인수를 받는데, 이는 사용자 지정 관리자 객체에 대한 핸들입니다. 예를 들면 다음과 같습니다.

function sl_customization(cm)

사용자 지정을 시작하기 위해서는 먼저 다음 할당문을 사용하여 sl_customization 함수가 기본(공장) 사용자 지정 설정을 가져와야 합니다:

hObj = cm.RTWBuildCustomizer;

그런 다음 메서드를 호출하여 사용자 지정을 레지스터합니다. 사용자 지정 관리자 객체에는 빌드 프로세스 후크 사용자 지정을 레지스터하기 위한 다음 메서드가 포함되어 있습니다:

  • addUserHook(hObj, hookType, hook)

    MATLAB 후크 스크립트 또는 hook로 지정된 함수를 hookType로 표시된 빌드 프로세스 단계에 레지스터합니다. hookType에 대해 유효한 값은 'entry', 'before_tlc', 'after_tlc', 'before_make', 'after_make''exit'입니다.

이 방법을 사용하여 sl_customization 함수의 인스턴스에 설치별 후크 함수를 레지스터하십시오.

Simulink 소프트웨어는 시작될 때 sl_customization.m 파일을 읽어들입니다. 나중에 파일을 변경한 경우, 변경 사항을 적용하려면 Simulink 세션을 다시 시작하거나 명령 창에 다음 명령을 입력해야 합니다:

sl_refresh_customizations

참고

다음의 경우에는 addUserHook 방식을 사용하지 마십시오:

  • 모델 구성을 변경하십시오. 예를 들어, 다음의 경우에는 이 메서드를 사용하지 마십시오:

    • 모델 변형 간에 전환합니다.

    • set_param 함수를 호출하세요.

    모델 구성을 변경하면 예상치 못한 코드 생성 결과가 발생할 수 있습니다.

  • 모델을 컴파일하는 명령어를 실행합니다. 모델을 컴파일하면 예상치 못한 동작이 발생할 수 있습니다.

sl_customization.m 후크 함수에서 사용할 수 있는 변수

sl_customization.m 후크 함수에서는 다음 변수들을 사용할 수 있습니다:

  • modelName — Simulink 모델의 이름 (모든 단계에 적용됨)

  • dependencyObject — 생성된 코드의 종속성을 포함하는 객체 ('after_make' 단계에서만 유효함)

후크 스크립트는 유효한 변수에 직접 접근할 수 있습니다. 후크 함수는 유효한 변수들을 해당 함수의 인수로 전달할 수 있습니다. 예를 들면 다음과 같습니다.

hObj.addUserHook('after_make', 'afterMakeFunction(modelName,dependencyObject);');

sl_customization.m을 사용한 빌드 프로세스 사용자 지정 예시

예제에 표시된 sl_customization.m 파일, 빌드 프로세스 사용자 지정용 sl_customization.maddUserHook 메서드를 사용하여 빌드 프로세스의 'entry''after_tlc' 단계에서 호출될 설치별 빌드 프로세스 후크를 지정합니다. 후크 함수의 소스 코드는 CustomRTWEntryHook.mCustomRTWPostProcessHook.m 예제를 참조하십시오.

예 1. 빌드 프로세스 사용자 지정을 위한 sl_customization.m
function sl_customization(cm)
% Register user customizations

% Get default (factory) customizations
hObj = cm.RTWBuildCustomizer;

% Register build process hooks
hObj.addUserHook('entry', 'CustomRTWEntryHook(modelName);');
hObj.addUserHook('after_tlc', 'CustomRTWPostProcessHook(modelName);');

end
예 2. CustomRTWEntryHook.m
function [str, status] = CustomRTWEntryHook(modelName)
str =sprintf('Custom entry hook for model ''%s.''',modelName);
disp(str)
status =1;
예 3. CustomRTWPostProcessHook.m
function [str, status] = CustomRTWPostProcessHook(modelName)
str =sprintf('Custom post process hook for model ''%s.''',modelName);
disp(str)
status =1;

사용자 지정하려는 Simulink 설치 디렉터리의 MATLAB 경로에 위의 세 파일을 포함시키면, 빌드 시 표시되는 출력에 코딩된 후크 함수의 메시지가 나타납니다. 예를 들어, ERT 기반 모델 UserDefinedDataTypes를 열고, 구성 파라미터 대화 상자의 코드 생성 창을 연 다음, Ctrl+B를 눌러 빌드를 시작하면 다음과 같은 메시지가 표시됩니다.

>> UserDefinedDataTypes

### Starting build procedure for model: UserDefinedDataTypes
Custom entry hook for model 'UserDefinedDataTypes.'
Custom post process hook for model 'UserDefinedDataTypes.'
### Successful completion of build procedure for model: UserDefinedDataTypes
>> 

addUserHook 메서드를 사용하여 빌드 프로세스를 사용자 지정하기

이 예제는 addUserHook 메서드를 사용하여 빌드 후크를 레지스터함으로써 빌드 프로세스를 사용자 지정하는 방법을 보여줍니다. 이 예제 모델은 사용자 지정 하드웨어 보드를 사용합니다. 'after_tlc'' 빌드 단계에서 사용자 지정 후크 메서드를 실행하면, 빌드 프로세스에서 사용자 지정 메인 파일을 링크합니다.

타깃 프레임워크를 사용하여 새 하드웨어 장치 레지스터하기

모델에 대한 하드웨어 설정이 이미 되어 있다면 이 섹션을 건너뛸 수 있습니다.

MATLAB에 하드웨어 장치에 대한 설명을 제공하는 target.Board 객체를 생성합니다.

myProcessor = target.get('Processor', ...
           'ARM Compatible-ARM Cortex-M');

myBoard = target.create('Board', ...
'Name', 'My Board with Custom Main File Linked', ...
'Processors', myProcessor);

타깃 객체를 내부 데이터베이스에 추가합니다.

boardObj = target.add(myBoard);
target.add summary:

    Objects added to internal database for current MATLAB session:
        target.Board        "My Board with Custom Main File Linked"
    1 object not added because they already exist.

모델 및 빌드 코드에 사용할 하드웨어 보드 지정

사용 중인 모델에 맞는 하드웨어 보드를 지정하고 GenerateSampleERTMain 옵션을 비활성화하십시오.

model = 'CustomBuildCounter';
open_system(model);

set_param(model, 'HardwareBoard', myBoard.Name);
set_param(model, 'IncludeMdlTerminateFcn', 'on');
set_param(model, 'GenerateSampleERTMain', 'off');

이 소프트웨어는 지정된 하드웨어 보드와 관련된 툴체인 및 프로세서에 적합한 구성 파라미터를 자동으로 선택합니다.

사용자 지정 설정이 없는 경우, 빌드 프로세스는 matlabroot/rtw/c/src/common 폴더에 있는 정적 rt_main.c 파일을 사용합니다.

slbuild(model);
### Searching for referenced models in model 'CustomBuildCounter'.
### Total of 1 models to build.
### Starting build procedure for: CustomBuildCounter
### Successful completion of build procedure for: CustomBuildCounter

Build Summary

Top model targets:

Model               Build Reason                                         Status                        Build Duration
=====================================================================================================================
CustomBuildCounter  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 9.9926s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 10.424s

RTW.BuildInfo 객체에는 rt_main.c를 포함하여 빌드 과정에서 사용되는 소스 파일의 이름이 담겨 있습니다.

bi = load(fullfile([model '_ert_rtw'], 'buildInfo.mat'));
srcfiles = getSourceFiles(bi.buildInfo, true, false)'
srcfiles = 2×1 cell
    {'$(START_DIR)/CustomBuildCounter_ert_rtw/CustomBuildCounter.c'}
    {'$(MATLAB_ROOT)/rtw/c/src/common/rt_main.c'                   }

빌드 프로세스 사용자 지정

사용자 지정 후크 메서드를 사용하면 기본값인 rt_main.c 대신 사용자 지정 메인 파일을 레지스터할 수 있습니다.

각 사용자 지정 후크 메서드는 모델 설정과 호환되는지 반드시 확인해야 합니다. 예를 들어, registerCustomMain.m에서 이 함수는 후크 메서드가 특정 하드웨어 보드에만 적용되는지 확인합니다.

edit(fullfile(pwd, 'myHooks', 'registerCustomMain.m'))

sl_refresh_customization을 통해 사용자 지정 후크 메서드를 레지스터합니다.

addpath('myHooks');
sl_refresh_customizations

코드를 생성하기 전에, 이전에 생성된 코드 생성 폴더와 모델 캐시를 삭제하십시오.

rmdir(fullfile(pwd, [model '_ert_rtw']), 's');
rmdir(fullfile(pwd, 'slprj'), 's');
delete([model '.slxc']);

모델을 빌드합니다.

slbuild(model);
### Searching for referenced models in model 'CustomBuildCounter'.
### Total of 1 models to build.
### Starting build procedure for: CustomBuildCounter
Custom after_tlc hook to register custom main file for model 'CustomBuildCounter.'
### Successful completion of build procedure for: CustomBuildCounter

Build Summary

Top model targets:

Model               Build Reason                                         Status                        Build Duration
=====================================================================================================================
CustomBuildCounter  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 7.6938s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 8.1919s

빌드 프로세스에서 myMainFile.c가 사용되는지 확인하십시오.

bi = load(fullfile([model '_ert_rtw'], 'buildInfo.mat'));
srcfiles = getSourceFiles(bi.buildInfo, true, false)'
srcfiles = 2×1 cell
    {'$(START_DIR)/CustomBuildCounter_ert_rtw/CustomBuildCounter.c'}
    {'$(START_DIR)/myMainFile.c'                                   }

정리

모델을 닫고, 내부 데이터베이스에서 타깃 객체를 제거하며, 사용자 지정 후크 메서드의 등록을 해제합니다.

close_system(model, 0);
target.remove(boardObj);
target.remove summary:

    Objects removed from internal database:
        target.Board    "My Board with Custom Main File Linked"
rmpath('myHooks');
sl_refresh_customizations

작업 공간에 추가된 변수를 모두 지웁니다.

clear INC K LIMIT RESET model bi srcfiles myBoard myProcessor boardObj

참고 항목

도움말 항목