주요 콘텐츠

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

재사용 가능한 서브시스템 출력을 다음과 같이 전달합니다.

재사용 가능한 서브시스템이 출력을 전달하는 방식을 제어합니다

모델 구성 창: 코드 생성 / 최적화

설명

재사용 가능한 서브시스템 출력을 다음으로 전달 파라미터는 재사용 가능한 서브시스템이 출력을 전달하는 방식을 지정합니다.

설정

개별 인수 (디폴트 값) | 구조체 참조
개별 인수

각 재사용 가능한 서브시스템의 출력 인수를, 출력 인수가 포함된 전역 메모리 영역에 대한 포인터가 아닌, 로컬 변수의 주소로 전달합니다. 이 옵션을 사용하면 전역 메모리 사용량을 줄일 수 있으며, 로컬 변수를 전역 블록 I/O 구조체로 다시 복사하는 과정을 생략할 수 있습니다. 신호들을 지역 변수로 할당하면 스택 크기가 증가할 수 있습니다. 스택 크기가 원하는 수준을 초과할 경우, 기본 설정을 사용하십시오. 기본적으로 개별적으로 전달되는 출력 인수의 최대 개수는 12개입니다. 인수의 개수를 늘리려면 서브시스템 출력에 대한 인수의 최대 개수 파라미터의 값을 늘리십시오.

구조체 참조

재사용 가능한 서브시스템의 출력값을 전역 메모리에 저장된 구조체에 대한 포인터로 전달합니다.

참고

디폴트 옵션은 차원이 가변적인 신호를 갖는 재사용 가능한 서브시스템에 사용됩니다.

예제

모두 확장

Bus Assignment 블록이 포함된 모델의 경우, 코드 생성기는 가능한 한 해당 블록의 입력과 출력에 동일한 변수를 사용합니다. 이러한 변수를 재사용하면 데이터 복사 횟수가 줄어들고, RAM 사용량을 절약하며, 코드 실행 속도가 빨라집니다.

예를 들어, bus_assignoptim에서는 6개의 요소를 포함하는 버스 신호가 Bus Assignment 블록과 Bus Selector 블록으로 입력됩니다. Bus Assignment 블록은 버스 요소 a1_real_array에 새로운 값을 할당합니다. 이 버스 신호는 Out1로 입력됩니다.

Model that contains several blocks, including a Bus Assignment block.

Assignment 및 Bus Assignment 블록에 대해 인 플레이스(in-place) 업데이트 수행 파라미터를 off로 설정하여 최적화가 적용되지 않은 코드를 생성합니다. 최적화를 적용하지 않은 상태에서 bus_assignoptim_step 함수에는 다음과 같은 코드가 포함되어 있습니다:

void bus_assignoptim_step(void)
{
  real_T rtb_Assignment[36];
  int32_T i;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    rtb_Assignment[i] = bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    rtb_Assignment[(int32_T)(i + 22)] = (bus_assignoptim_U.In1.a1_real_array
      [(int32_T)(i + 22)] + bus_assignoptim_U.In1.a1_num) *
      bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */

  /* Outport: '<Root>/Out' incorporates:
   *  BusAssignment: '<Root>/Bus Assignment'
   *  Inport: '<Root>/In1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* BusAssignment: '<Root>/Bus Assignment' incorporates:
   *  Outport: '<Root>/Out'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] = rtb_Assignment[i];
  }
}
생성된 코드에는 데이터가 bus_assignoptim_Y.Out.a1_real_array에 할당되기 전에 해당 데이터를 임시로 저장하기 위한 rtb_Assignment 배열이 포함되어 있습니다.

Assignment 및 Bus Assignment 블록에 대해 인 플레이스(in-place) 업데이트 수행 파라미터를 on로 설정하여 최적화가 적용된 코드를 생성합니다. 최적화 결과, bus_assignoptim_step 함수에는 다음과 같은 코드가 포함됩니다:

/* Model step function */
void bus_assignoptim_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out' incorporates:
   *  Inport: '<Root>/In1'
   *  SignalConversion: '<Root>/TmpBusAssignmentBufferAtBus AssignmentInport1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Outport: '<Root>/Out'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] =
      bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    bus_assignoptim_Y.Out.a1_real_array[(int32_T)(i + 22)] =
      (bus_assignoptim_U.In1.a1_real_array[(int32_T)(i + 22)] +
       bus_assignoptim_U.In1.a1_num) * bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */
}
생성된 코드에는 데이터를 저장하기 위한 임시 배열 rtb_Assignment1가 포함되어 있지 않습니다. 코드 생성에 따른 생성된 코드는 이 데이터를 bus_assignoptim_Y.Out.a1_real_array에 직접 할당합니다.

권장 설정

응용 사례설정
디버그영향 없음
추적성영향 없음
효율성개별 인수 (실행, RAM), 구조체 참조 (ROM)
안전 예방 조치영향 없음

프로그래밍 방식 사용

파라미터: PassReuseOutputArgsAs
유형: 문자형 벡터
값: 'Structure reference' | 'Individual arguments'
디폴트 값: 'Individual arguments'

버전 내역

R2009a에 개발됨