이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
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.m은 addUserHook 메서드를 사용하여 빌드 프로세스의 'entry' 및 'after_tlc' 단계에서 호출될 설치별 빌드 프로세스 후크를 지정합니다. 후크 함수의 소스 코드는 CustomRTWEntryHook.m 및 CustomRTWPostProcessHook.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);');
endfunction [str, status] = CustomRTWEntryHook(modelName)
str =sprintf('Custom entry hook for model ''%s.''',modelName);
disp(str)
status =1;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