이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
생성된 코드에서의 함수 재사용
이 예제는 재사용 가능한 코드 생성을 위한 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 10.326s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 10.98s
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)
### 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 5.5811s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.9919s
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)
{
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)
### 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.6479s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.0306s
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' */
myfun();
/* End of Outputs for SubSystem: '<Root>/SS1' */
/* Outputs for Atomic SubSystem: '<Root>/SS2' */
myfun2();
/* End of Outputs for SubSystem: '<Root>/SS2' */
}
모델 스텝 함수는 myfun 및 myfun2 함수에 대한 호출을 포함합니다. 이 함수들은 void-void 인터페이스를 가집니다.
Function Packaging 파라미터를 Auto로 변경하십시오.
set_param('GeneratedCodeFunctionReuse/SS1','RTWSystemCode','Auto') set_param('GeneratedCodeFunctionReuse/SS2','RTWSystemCode','Auto')
auto 설정의 경우, Simulink Coder가 최적의 형식을 선택합니다. 이 모델의 경우 최적의 형식은 재사용 가능한 함수입니다.