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

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

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

  • Параметр конфигурации модели Размещение общего кода установлено в 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 файл в общей папке утилит. В противном случае константы генерируются как описано в Генерация Кода of Constant Parameters.

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

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

Можно изменить эту настройку программно с помощью параметра 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), которая задана для выравнивания данных.

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

  • Для констант Memory Section следующим образом MemVolatile или MemConstVolatile.

  • Значение параметра GenerateSharedConstants установлено в off.

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

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

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

Похожие темы