주요 콘텐츠

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

Assignment 및 Bus Assignment 블록에 대해 인 플레이스(in-place) 업데이트 수행

Bus Assignment 및 Assignment 블록의 입력 및 출력 변수를 재사용합니다.

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

설명

Assignment 및 Bus Assignment 블록에 대해 인 플레이스(in-place) 업데이트 수행 파라미터는 코드 생성기가 가능한 경우 버스 할당 및 Assignment 블록의 입력 및 출력 변수를 재사용하도록 지시합니다.

종속성

신호 저장공간 재사용 파라미터를 설정하면 이 파라미터가 활성화됩니다.

설정

on (디폴트 값) | off
On

Embedded Coder®는 가능한 경우 Bus Assignment 및 Assignment 블록의 입력 및 출력 변수를 재사용합니다. 이러한 변수를 재사용하면 데이터 복사 횟수가 줄어들고, RAM 사용량을 절약하며, 코드 실행 속도가 빨라집니다.

Off

Embedded Coder는 Bus Assignment 및 Assignment 블록의 입력 및 출력 변수를 재사용하지 않습니다.

예제

모두 확장

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

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

Model containing 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에 직접 할당합니다.

권장 설정

응용 사례설정
디버그영향 없음
추적성영향 없음
효율성On
안전 예방 조치

권장 설정 없음

프로그래밍 방식 사용

파라미터: BusAssignmentInplaceUpdate
유형: 문자형 벡터
값: 'on' | 'off'
디폴트 값: 'on'

버전 내역

R2017a에 개발됨