이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
Simulink 환경 내에서 통합 코드 빌드하기
워크플로
코드 생성과 외부 C 또는 C++ 코드를 통합한 실행 프로그램을 빌드하려면, 이 테이블에 나열된 작업들을 순서대로 수행하십시오.
작업 | 작업 | 추가 정보 |
|---|---|---|
1 | 구현 방식을 선택하세요. | Simulink 모델로부터 생성된 코드의 빌드에 대한 접근법 (Embedded Coder) 예제는 Build Process Workflow for Real-Time Systems (Embedded Coder) 항목을 참조하십시오. |
2 | 외부 코드에 대한 빌드 프로세스 지원을 구성하십시오. | Configure Parameters for Integrated Code Build Process (Embedded Coder) |
3 | S-Function을 통해 외부 코드를 통합한 경우, 해당 외부 코드에 대한 S-Function 빌드 지원을 구성하십시오. | Build Support for S-Functions (Embedded Coder) Use makecfg to Customize Generated Makefiles for S-Functions (Embedded Coder) 예를 들어, Call Reusable Hardware-Independent External Code for Simulation and Code Generation (Embedded Coder)를 참고하세요. |
4 | 외부 코드 소스, 라이브러리 및 헤더 파일을 찾을 수 있도록 빌드 프로세스를 구성합니다. | Manage Build Process File Dependencies (Embedded Coder) Control Library Location and Naming During Build (Embedded Coder) |
5 | 외부 코드 통합에 필요한 사용자 지정 빌드 처리를 설정하십시오. | 빌드 프로세스 사용자 지정 워크플로에 대해서는 Customize Post-Code-Generation Build Processing (Embedded Coder)를 참조하십시오. 툴체인 기반 빌드에 빌드 사용자 지정을 자동으로 적용하려면 Customize Build Process with sl_customization.m (Embedded Coder)를 참조하십시오. 템플릿 makefile에 빌드 사용자 지정을 자동으로 적용하는 방법을 알아보려면 Customize Build Process with STF_make_rtw_hook File (Embedded Coder)를 참조하십시오. |
통합 코드 빌드 프로세스에 대한 파라미터 구성
이 테이블은 외부 코드 통합을 위한 빌드 프로세스를 지원하는 모델 구성 파라미터 대화 상자의 코드 생성 > 사용자 지정 코드 패널에 있는 모델 구성 파라미터에 대한 안내를 제공합니다. 외부 코드용 폴더에 대한 자세한 내용은 빌드 프로세스 폴더 관리 (Embedded Coder)를 참조하십시오. 외부 코드를 Code generation folder에 배치하기로 한 경우, Preserve External Code Files in Build Folder (Embedded Coder)를 참조하십시오.
| 수행할 작업 | 선택 |
|---|---|
헤더 파일이 포함된 include 폴더를 빌드 프로세스에 추가합니다. | 코드 정보 > Include directories를 입력하고, 폴더의 절대 경로 또는 상대 경로를 입력하세요. 상대 경로를 지정할 경우, 해당 경로는 빌드 폴더를 기준으로 한 것이 아니라 모델 파일이 포함된 폴더를 기준으로 해야 합니다. 지정하는 폴더의 순서는 헤더, 소스 및 라이브러리 파일을 검색하는 순서입니다. |
컴파일 및 링크할 소스 파일을 추가합니다. | 코드 정보 > 소스 파일를 입력하고, 파일의 전체 경로 또는 파일 이름만 입력하세요. 파일이 현재 MATLAB® 폴더나 포함 폴더 중 하나에 있는 경우, 파일 이름만 입력하십시오. 지정하는 소스 파일이 하나 추가될 때마다, 빌드 프로세스는 해당 소스 파일이 위치한 폴더에 대한 템플릿 makefile 내의 일반 규칙을 확장합니다. 예를 들어, 소스 파일이
%.obj: buildir\inc\%.c $(CC) -c -Fo$(@F) $(CFLAGS) $< 빌드 프로세스는 소스 파일을 나열한 순서대로 규칙을 추가합니다. |
링크할 라이브러리 추가 | 코드 정보 > 라이브러리를 입력하고, 라이브러리의 전체 경로 또는 파일 이름만 입력하세요. 라이브러리가 현재 MATLAB 폴더나 인클루드 폴더 중 하나에 있는 경우, 파일 이름만 입력하십시오. |
MATLAB Function 블록, Stateflow® 차트 및 Truth Table 블록 시뮬레이션에 지정된 것과 동일한 사용자 지정 코드 설정을 사용하십시오. | [시뮬레이션 타깃]과 동일한 사용자 지정 코드 설정 사용 이 파라미터는 구성 파라미터 대화 상자의 시뮬레이션 타깃 패널을 가리킵니다. |
라이브러리 모델이 해당 라이브러리가 연결된 상위 모델과는 다른 사용자 지정 코드 설정을 사용할 수 있도록 허용합니다. | 로컬 사용자 지정 코드 설정 사용(메인 모델에서 상속하지 않음) 이 파라미터는 MATLAB Function 블록, Stateflow 차트 또는 Truth Table 블록을 포함하는 라이브러리 모델에서만 사용할 수 있습니다. |
빌드 폴더에 외부 코드 파일 보관
기본적으로 빌드 과정에서 외부 소스 파일은 삭제됩니다. 다음 지침을 따르면 외부 소스 파일을 보존할 수 있습니다.
빌드 폴더에 .c/.cpp 또는 .h 소스 파일을 넣고, TLC 코드 생성 과정에서 코드 생성기가 해당 파일을 삭제하지 못하도록 하려면, .c/.cpp 또는 .h 파일의 첫 번째 줄에 target specific file라는 텍스트를 삽입하십시오. 예를 들면 다음과 같습니다.
/* COMPANY-NAME target specific file * * This file is created for use with the * COMPANY-NAME target. * It is used for ... */ ...
“target specific file”이라는 텍스트를 앞의 예시와 같이 정확히 입력하고, 이 텍스트가 소스 파일의 첫 번째 줄에 위치하도록 하십시오. 이 텍스트 앞이나 뒤에 다른 텍스트가 나타날 수 있습니다.
사용자 파일을 이러한 방식으로 플래그하면, 생성된 소스 파일과 들여쓰기를 맞추기 위해 해당 파일을 후처리하는 것을 방지할 수 있습니다. 이전 릴리스에서는 model_*.c/.cpp 패턴(여기서 *는 텍스트)을 따르는 이름을 가진 빌드 폴더 파일에 대해 자동 들여쓰기가 적용되었습니다. 들여쓰기는 별다른 문제가 되지 않지만, 소스 제어 소프트웨어가 이를 차이점으로 검출하여 불필요한 업데이트를 트리거할 수 있습니다.
S-Function 지원 구축
사용자가 작성한 S-Function 블록은 외부 코드를 Simulink® 개발 환경에 통합할 수 있는 강력한 방법을 제공합니다. 대부분의 경우, S-Function을 사용하여 기존의 외부 코드를 생성된 코드와 통합합니다. S-Function을 작성하는 데는 다음과 같은 몇 가지 방법이 있습니다:
또한 S-Function은 레거시 및 사용자 지정 코드 파일에 대한 빌드 정보를 빌드 프로세스에 포함시키는 데 있어 가장 유연하고 효율적인 방법을 제공합니다.
빌드 프로세스에 S-Function을 추가하는 방법에는 여러 가지가 있습니다.
암시적 빌드 지원
S-Function을 사용하여 모델을 빌드할 때, 빌드 프로세스는 생성된 makefile에 규칙, 포함 경로 및 소스 파일 이름을 추가합니다. S-Function의 소스 파일(.h, .c, .cpp)은 S-Function MEX 파일과 동일한 폴더에 있어야 합니다. 빌드 시 툴체인 방식이든 템플릿 makefile 방식이든, 빌드 프로세스는 툴체인이나 템플릿 makefile을 통해 이 정보를 전달합니다.
S-Function MEX 파일(예:
)과 동일한 폴더에sfcnname.mexext파일이 존재하면, 해당 폴더가 포함 경로에 추가됩니다.sfcnname.hS-Function MEX 파일과 동일한 폴더에
또는sfcnname.c파일이 존재하는 경우, 빌드 프로세스는 해당 폴더에 있는 파일을 컴파일하기 위한 makefile 규칙을 추가합니다.sfcnname.cppS-Function이 TLC 파일과 인라인 처리되지 않은 경우, 빌드 과정에서 S-Function 소스 파일을 컴파일해야 합니다. 컴파일할 파일 목록에 추가할 소스 파일의 이름을 결정하기 위해, 빌드 프로세스는 MATLAB 경로에서
를 검색합니다. 소스 파일이 발견되면, 빌드 과정에서 해당 소스 파일 이름이 makefile에 추가됩니다. 경로에서sfcnname.cpp를 찾을 수 없는 경우, 빌드 프로세스는 해당 파일이 MATLAB 경로에 있는지 여부와 관계없이 makefile에sfcnname.cpp라는 파일 이름을 추가합니다.sfcnname.c참고
Simulink 엔진이 시뮬레이션 및 코드 생성을 위한 MEX 파일을 찾을 수 있으려면, 해당 파일이 MATLAB 경로에 있거나 현재 MATLAB 작업 폴더에 있어야 합니다.
S-Function에 대한 추가 소스 파일 지정
S-Function에 추가적인 소스 파일 종속성이 있는 경우, 빌드 프로세스에 해당 추가 모듈의 이름을 포함시켜야 합니다. 파일 이름을 지정하십시오:
S-Function 블록 파라미터 대화 상자의 S-Function 모듈 필드에서
set_param함수 호출 시SFunctionModules파라미터를 사용하여
예를 들어, 여러 모듈로 S-Function을 구축한다고 가정해 봅시다.
mex sfun_main.c sfun_module1.c sfun_module2.c
그런 다음 다음 방법 중 하나를 사용하여 모듈을 빌드 프로세스에 추가할 수 있습니다:
S-Function 블록 대화 상자에서 S-Function 모듈 필드에
sfun_main,sfun_module1및sfun_module2를 지정하십시오.MATLAB 명령 프롬프트에서 다음을 입력하십시오:
set_param(sfun_block,'SFunctionModules','sfun_module1 sfun_module2')
또는 파라미터 값을 나타내는 변수를 정의할 수도 있습니다.
modules = 'sfun_module1 sfun_module2' set_param(sfun_block,'SFunctionModules', modules)
S-Function 모듈 필드와 SFunctionModules 파라미터는 소스 파일의 전체 경로 지정을 지원하지 않습니다. 이 파라미터를 사용하려면, 코드 생성기가 makefile을 실행할 때 추가 소스 파일을 찾아야 합니다. 코드 생성기가 추가 파일을 찾을 수 있도록, 해당 파일들을 S-Function MEX 파일과 동일한 폴더에 저장하십시오. 그러면 암시적 빌드 지원에 설명된 암시적 빌드 기능을 활용할 수 있습니다.
코드를 생성할 준비가 되면, Control Regeneration of Top Model Code에 설명된 대로 코드 생성기가 최상위 모델을 다시 구축하도록 강제하십시오.
다른 위치에 있는 소스 파일을 지정하거나 라이브러리나 오브젝트 파일을 지정하는 등, 더 복잡한 S-Function 파일 종속성이 필요한 경우에는 Use rtwmakecfg.m API to Customize Generated Makefiles에 설명된 대로 rtwmakecfg.m API를 사용하십시오.
TLC 라이브러리 함수 사용하기
TLC 파일을 작성하여 S-Function을 인라인으로 구현하는 경우, TLC 라이브러리 함수인 LibAddToModelSources를 사용하여 빌드 프로세스에 소스 파일 이름을 추가할 수 있습니다. 자세한 내용은 LibAddSourceFileCustomSection(file, builtInSection, newSection) 항목을 참조하십시오.
참고
이 함수는 소스 파일의 전체 경로 지정을 지원하지 않습니다. 이 함수는 코드 생성기가 makefile을 실행할 때 추가 소스 파일을 찾을 수 있다고 가정합니다.
또 다른 유용한 TLC 라이브러리 함수는 LibAddToCommonIncludes입니다. 이 함수를 #include 문에서 사용하여, 생성된 model.h 헤더 파일에 S-Function 헤더 파일을 포함시키십시오. 자세한 내용은 LibAddToCommonIncludes(incFileName) 항목을 참조하십시오.
다른 위치에 있는 소스 파일을 지정하거나 라이브러리나 오브젝트 파일을 지정하는 등, 더 복잡한 S-Function 파일 종속성이 필요한 경우에는 Use rtwmakecfg.m API to Customize Generated Makefiles에 설명된 대로 rtwmakecfg.m API를 사용하십시오.
S-Function 라이브러리 사전 컴파일
MATLAB 언어 함수인 rtw_precompile_libs를 사용하여 모델에 대한 새 S-Function 라이브러리(MEX 파일)나 업데이트된 S-Function 라이브러리를 미리 컴파일할 수 있습니다. 이 함수는 지정된 모델과 라이브러리 빌드 사양을 사용하여 라이브러리를 빌드하고, 이를 사전 컴파일된 라이브러리 폴더에 배치합니다.
S-Function 라이브러리를 사전 컴파일하면 시스템 빌드를 최적화할 수 있습니다. 사전 컴파일된 라이브러리가 준비되면, 이후 빌드 과정에서는 라이브러리 컴파일 단계를 생략할 수 있습니다. 수많은 라이브러리를 사용하는 모델의 경우, 빌드 처리 시간 단축 효과가 상당할 수 있습니다.
rtw_precompile_libs를 사용하려면:
사용 중인 시스템 플랫폼에 따라 파일 유형 확장자를 포함한 라이브러리 파일의 접미사를 설정하십시오.
플랫폼 유형을 확인한 다음,
TargetLibSuffix파라미터를 사용하여 그에 맞게 라이브러리 접미사를 설정하는 것을 고려해 보십시오. 예를 들어, GRT 타깃에 접미사를 적용할 때, UNIX® 플랫폼의 경우 접미사를_std.a로, Windows® 플랫폼의 경우_vcx64.lib로 설정할 수 있습니다.if isunix suffix = '_std.a'; else suffix = '_vcx64.lib'; end set_param(my_model,'TargetLibSuffix', suffix);사전 컴파일된 라이브러리의 접미사와 확장자에 영향을 미치는 여러 가지 요인이 있습니다. 다음 테이블에는 시스템 타깃 파일, 컴파일러 툴체인 및 접미사와 확장자 선택에 영향을 미치는 기타 옵션에 대한 일반적인 선택 예시가 나와 있습니다. 자세한 내용은
matlab/rtw/c/grt폴더 또는matlab/rtw/c/ert폴더에 있는 템플릿 make 파일을 확인해 보세요.TMF 파일 컴파일러 _TOOL_CHAIN 값 프리컴파일러 라이브러리 (PRECOMP_LIBRARIES) 라이브러리 접미사 S-Function (EXPAND _LIBRARY _NAME 값) 라이브러리 접미사 정수 전용 코드 (EXPAND _LIBRARY _NAME 값) 속도 향상을 위한 라이브러리 접미사 최적화 (_LIBRARY _NAME 값 확장) 라이브러리 확장 (EXPAND _LIBRARY _NAME 값) ert_vcx64.tmf vcx64 _rtwsfcn_vcx64 _int_ert_vcx64 _ert_vcx64 .lib ert_unix.tmf unix _rtwsfcn _int_ert _ert .a grt_vcx64.tmf vcx64 해당 사항 없음 해당 사항 없음 _vcx64 .lib grt_unix.tmf unix 해당 사항 없음 해당 사항 없음 _std .a 사전 컴파일된 라이브러리 폴더를 설정합니다.
사전 컴파일된 라이브러리 폴더를 설정하려면 다음 방법 중 하나를 사용하십시오:
Specify the Location of Precompiled Libraries에 설명된 대로
TargetPreCompLibLocation파라미터를 설정하십시오.rtwmakecfg.m함수 파일에서makeInfo.precompile필드를 설정하십시오. (자세한 내용은 Use rtwmakecfg.m API to Customize Generated Makefiles를 참조하십시오.)
TargetPreCompLibLocation와makeInfo.precompile를 모두 설정하면,TargetPreCompLibLocation에 대한 설정이 우선 적용됩니다.다음 명령어는 모델
my_model의 사전 컴파일된 라이브러리 폴더를 현재 작업 폴더 아래의lib폴더로 설정합니다.set_param(my_model,'TargetPreCompLibLocation', fullfile(pwd,'lib'));
참고
사전 컴파일된 라이브러리 파일의 타깃 폴더와 라이브러리 파일 확장자를 모두 설정하면, 빌드 과정에서 빌드 처리를 진행하는 동안 누락된 사전 컴파일된 라이브러리 파일이 있는지 여부가 검출됩니다.
빌드 사양을 정의합니다.
빌드 사양을 정의하는 구조를 설정합니다. 다음 테이블에는 구조체에서 정의할 수 있는 필드들이 설명되어 있습니다.
rtwmakecfgDirs를 제외하고는 이 필드들은 선택 사항입니다.필드 설명 rtwmakecfgDirs문자형 벡터로 구성된 셀형 배열로, 사전 컴파일할 라이브러리의
rtwmakecfg파일이 포함된 폴더 이름을 나타냅니다. 이 함수는rtwmakecfg가 반환하는makeInfo.library의Name및Location요소를 사용하여 사전 컴파일된 라이브러리의 이름과 위치를 지정합니다.TargetPreCompLibLocation파라미터를 설정하여 라이브러리 폴더를 지정하면, 해당 설정이makeInfo.library.Location설정을 우선합니다.참고: 지정된 모델에는
rtwmakecfg파일에 명시된 사전 컴파일된 라이브러리를 사용하는 블록이 반드시 포함되어야 합니다. TMF를 makefile로 변환하는 과정에서 빌드 프로세스가 해당 라이브러리를 사용하는 경우에만 라이브러리 규칙이 생성되기 때문입니다.libSuffix각 라이브러리 이름의 끝에 추가될 파일 확장자를 포함한 접미사를 지정하는 문자형 벡터입니다(예: .a또는_vc.lib). 문자형 벡터에는 마침표(.)가 포함되어야 합니다. 이 필드나TargetLibSuffix파라미터 중 하나를 사용하여 접미사를 설정해야 합니다. 두 메커니즘 모두에서 접미사를 지정하는 경우,TargetLibSuffix설정이 이 필드의 설정보다 우선합니다.intOnlyBuild부울 플래그. 이 플래그를 true로 설정하면, 라이브러리가 정수 코드만으로 컴파일되도록 최적화되어야 함을 나타냅니다. 이 필드는 ERT 타깃에만 적용됩니다. makeOptsrtwMake명령줄에 포함될 옵션을 지정하는 문자형 벡터입니다.addLibsrtwmakecfg함수에서 지정되지 않은, 빌드할 라이브러리를 지정하는 구조체로 구성된 셀형 배열입니다. 각 구조체는 두 개의 문자형 배열 필드로 정의되어야 합니다:libName— 접미사가 없는 라이브러리 이름libLoc— 사전 컴파일된 라이브러리가 위치한 곳
타깃 makefile(TMF)에서는 다른 라이브러리와 해당 라이브러리의 빌드 방식을 지정할 수 있습니다. 이 필드를 사용하여 해당 라이브러리를 사전 컴파일하십시오.
다음 명령어는 빌드 사양
build_spec를 설정합니다. 이는 컴파일할 파일이 현재 작업 폴더 아래의src폴더에 있음을 나타냅니다.build_spec = []; build_spec.rtwmakecfgDirs = {fullfile(pwd,'src')};rtw_precompile_libs에 호출을 수행합니다.호출 시에는 사전 컴파일된 라이브러리를 빌드할 모델과 빌드 사양을 명시해야 합니다. 예를 들면 다음과 같습니다.
rtw_precompile_libs(my_model,build_spec);
참고 항목
도움말 항목
- Call Reusable Hardware-Independent External Code for Simulation and Code Generation (Embedded Coder)
- Place External C/C++ Code in Generated Code (Embedded Coder)
- Call External Device Drivers (Embedded Coder)
- Deploy Applications to Target Hardware (Embedded Coder)
- Deploy Generated Component Software to Application Target Platforms (Embedded Coder)