이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
서브시스템에 대한 생성된 코드 함수 패키징 지정
이 예제는 코드 생성기가 Atomic Subsystem에 대한 코드를 생성하는 방식을 구성하는 방법을 보여줍니다. 서브시스템을 원자 단위로 구성하려면 원자 단위로 취급 블록 파라미터를 선택하십시오. 이 파라미터는 코드 생성 탭에서 함수 패키징 파라미터를 활성화합니다. 함수 패키징 파라미터에는 다음 네 가지 설정이 있습니다:
Inline: 서브시스템 코드를 인라인으로 삽입하십시오.Nonreusable function: I/O를 전역 데이터로 전달받아 함수를 생성합니다.Reusable function: I/O를 함수 인수로 전달받아 함수를 생성합니다.Auto: Simulink Coder가 생성된 함수를 문맥에 따라 최적화하도록 합니다.
Reusable function 및 Auto 설정은 코드 생성기가 서브시스템 코드를 재사용할 수 있도록 허용합니다. Reusable function 및 Nonreusable function 설정은 함수명 파라미터, 함수명, 그리고 파일명 파라미터를 활성화합니다.
Embedded Coder® 라이선스를 보유한 경우, 재사용 불가능한 서브시스템을 구성하여 인수를 수락할 수 있습니다.
예제 모델
GeneratedCodeFunctionReuse 모델은 두 개의 동일한 서브시스템인 SS1와 SS2를 포함합니다. 이러한 서브시스템의 경우, 함수 패키징 파라미터는 Reusable function로 설정되고, 함수 이름 파라미터는 myfun로 설정됩니다. 서브시스템들은 파라미터화된 마스크 서브시스템들이다. 마스크가 적용된 서브시스템의 내용을 확인하려면, 서브시스템 블록을 마우스 오른쪽 버튼으로 클릭한 다음 마스크 편집 > 마스크 내부 확인을 선택하십시오.
model = 'GeneratedCodeFunctionReuse';
open_system(model);

코드 생성 및 검사
Simulink Coder 또는 Embedded Coder 앱을 엽니다. 그런 다음, 모델에 대한 코드를 생성합니다.
slbuild(model)
### Searching for referenced models in model 'GeneratedCodeFunctionReuse'. ### Total of 1 models to build. ### Starting build procedure for: GeneratedCodeFunctionReuse ### Successful completion of build procedure for: GeneratedCodeFunctionReuse Build Summary Top model targets: Model Build Reason Status Build Duration ============================================================================================================================= GeneratedCodeFunctionReuse Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 6.5501s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 7.0433s
생성된 GeneratedCodeFunctionReuse.c 파일을 확인합니다.
cfile=fullfile(pwd, 'GeneratedCodeFunctionReuse_grt_rtw', 'GeneratedCodeFunctionReuse.c'); coder.example.extractLines(cfile, '/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void GeneratedCodeFunctionReuse_step(void)
{
/* Outputs for Atomic SubSystem: '<Root>/SS1' */
/* Inport: '<Root>/In1' incorporates:
* Inport: '<Root>/In2'
*/
myfun(GeneratedCodeFunctionReuse_U.In1, GeneratedCodeFunctionReuse_U.In2,
GeneratedCodeFunctionReuse_P.T1Data,
GeneratedCodeFunctionReuse_P.T1Break, &GeneratedCodeFunctionReuse_B.SS1);
/* End of Outputs for SubSystem: '<Root>/SS1' */
/* Outport: '<Root>/Out1' */
GeneratedCodeFunctionReuse_Y.Out1 =
GeneratedCodeFunctionReuse_B.SS1.LookupTable;
/* Outputs for Atomic SubSystem: '<Root>/SS2' */
/* Inport: '<Root>/In1' incorporates:
* Inport: '<Root>/In2'
*/
myfun(GeneratedCodeFunctionReuse_U.In1, GeneratedCodeFunctionReuse_U.In2,
GeneratedCodeFunctionReuse_P.T2Data,
GeneratedCodeFunctionReuse_P.T2Break, &GeneratedCodeFunctionReuse_B.SS2);
/* End of Outputs for SubSystem: '<Root>/SS2' */
/* Outport: '<Root>/Out2' */
GeneratedCodeFunctionReuse_Y.Out2 =
GeneratedCodeFunctionReuse_B.SS2.LookupTable;
}
모델 스텝 함수에는 재사용 가능한 함수 myfun에 대한 두 번의 호출이 있습니다. 마스크 파라미터인 T1Break, T1Data, T2Break 및 T2Data는 함수 인자입니다.
Function Packaging 파라미터를 Inline로 변경하십시오.
set_param('GeneratedCodeFunctionReuse/SS1','RTWSystemCode','Inline') set_param('GeneratedCodeFunctionReuse/SS2','RTWSystemCode','Inline')
코드를 생성하고 검사하십시오.
slbuild(model) cfile=fullfile(pwd, 'GeneratedCodeFunctionReuse_grt_rtw', 'GeneratedCodeFunctionReuse.c'); coder.example.extractLines(cfile, '/* Model step', '/* Model initialize', 1, 0); % In the model step function, the subsystem code is inlined.
### Searching for referenced models in model 'GeneratedCodeFunctionReuse'.
### Total of 1 models to build.
### Starting build procedure for: GeneratedCodeFunctionReuse
### Successful completion of build procedure for: GeneratedCodeFunctionReuse
Build Summary
Top model targets:
Model Build Reason Status Build Duration
=========================================================================================================
GeneratedCodeFunctionReuse Generated code was out of date. Code generated and compiled. 0h 0m 4.9244s
1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 5.7473s
/* Model step function */
void GeneratedCodeFunctionReuse_step(void)
{
real_T Out1_tmp;
/* Outputs for Atomic SubSystem: '<Root>/SS2' */
/* Outputs for Atomic SubSystem: '<Root>/SS1' */
/* Sum: '<S1>/Sum' incorporates:
* Inport: '<Root>/In1'
* Inport: '<Root>/In2'
* Sum: '<S2>/Sum'
*/
Out1_tmp = GeneratedCodeFunctionReuse_U.In1 + GeneratedCodeFunctionReuse_U.In2;
/* End of Outputs for SubSystem: '<Root>/SS2' */
/* Outport: '<Root>/Out1' incorporates:
* Lookup_n-D: '<S1>/Lookup Table'
* Sum: '<S1>/Sum'
*/
GeneratedCodeFunctionReuse_Y.Out1 = look1_binlx(Out1_tmp,
GeneratedCodeFunctionReuse_P.T1Break, GeneratedCodeFunctionReuse_P.T1Data,
10U);
/* End of Outputs for SubSystem: '<Root>/SS1' */
/* Outputs for Atomic SubSystem: '<Root>/SS2' */
/* Outport: '<Root>/Out2' incorporates:
* Lookup_n-D: '<S2>/Lookup Table'
*/
GeneratedCodeFunctionReuse_Y.Out2 = look1_binlx(Out1_tmp,
GeneratedCodeFunctionReuse_P.T2Break, GeneratedCodeFunctionReuse_P.T2Data,
10U);
/* End of Outputs for SubSystem: '<Root>/SS2' */
}
Function Packaging 파라미터를 Nonreusable function로 변경하십시오. SS2의 경우, 함수명 파라미터를 myfun2로 변경하십시오.
set_param('GeneratedCodeFunctionReuse/SS1','RTWSystemCode','Nonreusable function') set_param('GeneratedCodeFunctionReuse/SS2','RTWSystemCode','Nonreusable function') set_param('GeneratedCodeFunctionReuse/SS2','RTWFcnName','myfun2')
코드를 생성하고 검사하십시오.
slbuild(model) cfile=fullfile(pwd, 'GeneratedCodeFunctionReuse_grt_rtw', 'GeneratedCodeFunctionReuse.c'); coder.example.extractLines(cfile, '/* Model step', '/* Model initialize', 1, 0); % The model step function contains calls to the functions |myfun| and |myfun2|. % These functions have a void-void interface.
### Searching for referenced models in model 'GeneratedCodeFunctionReuse'.
### Total of 1 models to build.
### Starting build procedure for: GeneratedCodeFunctionReuse
### Successful completion of build procedure for: GeneratedCodeFunctionReuse
Build Summary
Top model targets:
Model Build Reason Status Build Duration
=========================================================================================================
GeneratedCodeFunctionReuse Generated code was out of date. Code generated and compiled. 0h 0m 4.1045s
1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 4.5451s
/* Model step function */
void GeneratedCodeFunctionReuse_step(void)
{
/* Outputs for Atomic SubSystem: '<Root>/SS1' */
myfun();
/* End of Outputs for SubSystem: '<Root>/SS1' */
/* Outputs for Atomic SubSystem: '<Root>/SS2' */
myfun2();
/* End of Outputs for SubSystem: '<Root>/SS2' */
}
Function Packaging 파라미터를 Auto로 변경하십시오.
set_param('GeneratedCodeFunctionReuse/SS1','RTWSystemCode','Auto') set_param('GeneratedCodeFunctionReuse/SS2','RTWSystemCode','Auto')
auto 설정의 경우, Simulink Coder가 최적의 형식을 선택합니다. 이 모델의 경우 최적의 형식은 재사용 가능한 함수입니다.