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

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

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

  • Параметр конфигурации модели Разделяемое размещение кода (Simulink Coder) установлен в 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, генератор кода задает постоянные значения в the_sharedutils папка в const_params.c файл. Когда GenerateSharedConstants установлен в off, генератор кода задает постоянные значения в неразделяемой области в model_ert_rtw файл в model_data.c файл.

Откройте модель rtwdemo_throttlecntrl:

Проверьте, что параметр конфигурации модели Разделяемое размещение кода (Simulink Coder) установлен в 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')

Вы видите неразделенные константы в folderrtwdemo_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), которая задана для выравнивания данных.

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

  • Memory Section для констант является MemVolatile или MemConstVolatile.

  • Параметр GenerateSharedConstants установлен в off.

Отдельные константы не совместно используются, если:

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

  • Константа имеет пользовательский тип, где Data Scope не установлен в Exported.

Похожие темы