exponenta event banner

Общие постоянные параметры для повторного использования кода

Сгенерированный код для постоянных параметров можно совместно использовать в моделях, если применяется одно из следующих условий.

  • Постоянные параметры совместно используются в иерархии привязок модели.

  • Параметр конфигурации модели Shared code placement имеет значение Shared location.

Если не требуется создавать общие константы, и параметр конфигурации модели Размещение общего кода (Shared code placement) имеет значение Shared location, задать параметр GenerateSharedConstants кому off. Например, чтобы отключить общие константы для текущей модели, в окне команд введите следующее.

set_param(gcs,'GenerateSharedConstants','off');
Когда параметр конфигурации модели GenerateSharedConstants имеет значение off, генератор кода генерирует постоянные параметры, совместно используемые в иерархии ссылок модели в общем местоположении, в slprj/target/_sharedutils но за пределами const_params.c файл. Генератор кода определяет индивидуальные параметры констант в файлах повторно используемой библиотечной подсистемы по отдельности.

Когда параметр конфигурации модели GenerateSharedConstants имеет значение on, генератор кода создает общие постоянные параметры по отдельности и помещает их в файл const_params.c. Генератор кода помещает этот файл в папку общих утилит slprj/target/_sharedutils.

Например, если константа имеет несколько применений в иерархии ссылок модели, где модель верхнего уровня имеет имя topmodкод для совместно используемой константы следующий:

  • В папке общей утилиты slprj/grt/_sharedutils, постоянные параметры определены в const_params.c и поименно rtCP_pooled_ добавляется к уникальной контрольной сумме:

    extern const real_T rtCP_pooled_lfcjjmohiecj[7];
    const real_T rtCP_pooled_lfcjjmohiecj[7] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 };
    
    extern const real_T rtCP_pooled_ppphohdbfcba[7];
    const real_T rtCP_pooled_ppphohdbfcba[7] = { 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };

  • В top_model_private.h или в ссылочной модели, ref_model_private.h, для лучшей читаемости константы переименовываются следующим образом:

    extern const real_T rtCP_pooled_lfcjjmohiecj[7];
    extern const real_T rtCP_pooled_ppphohdbfcba[7];
    
    #define rtCP_Constant_Value   rtCP_pooled_lfcjjmohiecj  /* Expression: [1 2 3 4 5 6 7]
                                                             * Referenced by: '<Root>/Constant'*/
    #define rtCP_Gain_Gain        rtCP_pooled_ppphohdbfcba  /* Expression: [7 6 5 4 3 2 1]
                                                             * Referenced by: '<Root>/Gain' */

  • В topmod.c или refmod.c, местом вызова может быть:

    for (i = 0; i < 7; i++) {
       topmod_Y.Out1[i] = (topmod_U.In1 + rtCP_Constant_Value[i]) * rtCP_Gain_Gain[i];
    }

Генератор кода пытается создать константы как отдельные константы для const_params.c в папке общих утилит. В противном случае генерируются константы, как описано в разделе Создание кода параметров констант.

Подавление общих констант в сгенерированном коде

Можно выбрать, создает ли генератор кода общие константы и общие функции. Возможно, необходимо иметь возможность разделять код и данные между подсистемами или обнаружить, что совместное использование констант приводит к нехватке памяти во время создания кода.

Этот параметр можно изменить программным путем с помощью параметра GenerateSharedConstants с set_param и get_param.

В следующем примере, когда GenerateSharedConstants имеет значение on, генератор кода определяет постоянные значения в_sharedutils в папке const_params.c файл. Когда GenerateSharedConstants имеет значение off, генератор кода определяет значения констант в области без совместного использования, в model_ert_rtw в файле model_data.c файл.

Открытие модели rtwdemo_throttlecntrl:

Убедитесь, что для параметра конфигурации модели Shared code placement установлено значение Shared location. Если параметр имеет значение Auto, генератор кода игнорирует настройку GenerateSharedConstants. При попытке задать значение параметра появляется сообщение об ошибке. По умолчанию значение GenerateSharedConstants выбран.

В окне команд задайте GenerateSharedConstants кому on:

>> set_param('rtwdemo_throttlecntrl','GenerateSharedConstants','on')

Вы видите общие определения констант в папке slprj/grt/_sharedutils, в файле const_params.c:

extern const real_T rtCP_pooled_H4eTKtECwveN[9];
const real_T rtCP_pooled_H4eTKtECwveN[9] = { 1.0, 0.75, 0.6, 0.0, 0.0, 0.0, 0.6,
  0.75, 1.0 } ;

extern const real_T rtCP_pooled_SghuHxKVKGHD[9];
const real_T rtCP_pooled_SghuHxKVKGHD[9] = { -1.0, -0.5, -0.25, -0.05, 0.0, 0.05,
  0.25, 0.5, 1.0 } ;

extern const real_T rtCP_pooled_WqWb2t17NA2R[7];
const real_T rtCP_pooled_WqWb2t17NA2R[7] = { -1.0, -0.25, -0.01, 0.0, 0.01, 0.25,
  1.0 } ;

extern const real_T rtCP_pooled_Ygnal0wM3c14[7];
const real_T rtCP_pooled_Ygnal0wM3c14[7] = { 1.0, 0.25, 0.0, 0.0, 0.0, 0.25, 1.0
} ;

В окне команд задайте GenerateSharedConstants кому off:

>> set_param('rtwdemo_throttlecntrl','GenerateSharedConstants','off')

В папке отображаются неразделенные константыrtwdemo_throttlecntrl_grt_rtw, в файле rtwdemo_throttlecntrl_data.c:

/* Constant parameters (auto storage) */
const ConstP_rtwdemo_throttlecntrl_T rtwdemo_throttlecntrl_ConstP = {
  /* Pooled Parameter (Expression: P_OutMap)
   * Referenced by:
   *   '<S2>/Proportional  Gain Shape'
   *   '<S3>/Proportional  Gain Shape'
   */
  { 1.0, 0.25, 0.0, 0.0, 0.0, 0.25, 1.0 },

  /* Pooled Parameter (Expression: P_InErrMap)
   * Referenced by:
   *   '<S2>/Proportional  Gain Shape'
   *   '<S3>/Proportional  Gain Shape'
   */
  { -1.0, -0.25, -0.01, 0.0, 0.01, 0.25, 1.0 },

  /* Pooled Parameter (Expression: I_OutMap)
   * Referenced by:
   *   '<S2>/Integral  Gain Shape'
   *   '<S3>/Integral  Gain Shape'
   */
  { 1.0, 0.75, 0.6, 0.0, 0.0, 0.0, 0.6, 0.75, 1.0 },

  /* Pooled Parameter (Expression: I_InErrMap)
   * Referenced by:
   *   '<S2>/Integral  Gain Shape'
   *   '<S3>/Integral  Gain Shape'
   */
  { -1.0, -0.5, -0.25, -0.05, 0.0, 0.05, 0.25, 0.5, 1.0 }
};

Ограничения общих постоянных параметров

Генератор кода не создает общих констант для модели, когда:

  • Модель имеет библиотеку замены кода (CRL), заданную для выравнивания данных.

  • Модель задается для замены имен типов данных в сгенерированном коде.

  • Раздел памяти для констант: MemVolatile или MemConstVolatile.

  • Параметр GenerateSharedConstants имеет значение off.

Отдельные константы не являются общими, если:

  • На константу ссылается неинлинированная S-функция.

  • Константа имеет определяемый пользователем тип, где для области данных не задано значение Exported.

Связанные темы