Можно совместно использовать сгенерированный код для постоянных параметров через модели, если любое из следующих условий применяется:
Постоянные параметры совместно используются в иерархии модели - ссылки.
Образцовый параметр конфигурации Разделяемое размещение кода (Simulink Coder) установлен в Shared location
.
Если вы не хотите генерировать совместно использованные константы, и Shared code placement установлен в Shared location
, установите параметр GenerateSharedConstants
на off
. Например, чтобы выключить совместно использованные константы для текущей модели, в Командном окне, вводят следующее.
set_param(gcs,'GenerateSharedConstants','off');
Генератор кода производит совместно использованные постоянные параметры индивидуально и размещает их в файл 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
:
В диалоговом окне Параметров конфигурации, на Code Generation> панель Interface, проверяют, что Совместно использованное размещение кода (Simulink Coder) установлено в Shared location
. Если Shared code placement установлен в Auto
, установка GenerateSharedConstants
проигнорирована. При попытке установить значение параметров, сообщение об ошибке появляется. Значением по умолчанию GenerateSharedConstants
является on
.
В Командном окне, набор 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')
Вы видите неразделенные константы в folder 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
.