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