В этом примере показано, как оптимизировать сгенерированный код путем встраивания числовых значений параметров блока. Параметры блока включают в себя параметр усиления блока усиления и наборы данных таблицы и точек останова n-D блока таблицы поиска.
Эта оптимизация определяет, занимают ли числовые параметры блока глобальную память в сгенерированном коде. Оптимизация может:
Повышение скорости выполнения.
Уменьшите потребление ОЗУ и ПЗУ.
Открыть пример модели rtwdemo_paraminline и настройте его для отображения сгенерированных имен блоков.
load_system('rtwdemo_paraminline') set_param('rtwdemo_paraminline','HideAutomaticNames','off') open_system('rtwdemo_paraminline')

Модель содержит блоки, имеющие следующие числовые параметры:
Параметры усиления блоков усиления
Параметры Constant value блоков Constant
Наборы данных таблицы и точек останова n-D блоков таблицы поиска
Выходные данные блока G2 и выходные данные блоков в восходящем направлении от G2 изменяются только при настройке значений параметров блока во время моделирования или при выполнении кода. При обновлении схемы модели эти блоки и сигнальные линии отображаются пурпурным цветом.
Использование нескольких блоков Simulink.Parameter в базовой рабочей области для задания значений их параметров. Все объекты параметров используют класс хранения Auto, что означает, что сгенерированный код можно настроить для ввода значений параметров.
Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Отключите оптимизацию, установив для параметра Параметры конфигурации > Поведение по умолчанию значение Tunable.
set_param('rtwdemo_paraminline','DefaultParameterBehavior','Tunable')
Создайте код из модели.
slbuild('rtwdemo_paraminline')
### Starting build procedure for: rtwdemo_paraminline ### Successful completion of build procedure for: rtwdemo_paraminline Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================================== rtwdemo_paraminline Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.9972s
В отчете о создании кода просмотрите исходный файл. rtwdemo_paraminline_data.c. Код определяет глобальную структуру, содержащую значения параметров блока. Каждый параметр блока в модели, например массив таблицы подстановки, набор точек останова или коэффициент усиления, отображается как поле структуры.
cfile = fullfile(... cgDir,'rtwdemo_paraminline_grt_rtw','rtwdemo_paraminline_data.c'); rtwdemodbtype(cfile,'/* Block parameters (default storage) */', '};', 1, 1);
/* Block parameters (default storage) */
P_rtwdemo_paraminline_T rtwdemo_paraminline_P = {
/* Variable: MAX_LIFT
* Referenced by: '<Root>/Constant'
*/
10.0,
/* Variable: SLIDER_POS
* Referenced by: '<Root>/Constant1'
*/
0.0,
/* Variable: T1Break
* Referenced by: '<Root>/1D Lookup'
*/
{ -5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 },
/* Variable: T1Data
* Referenced by: '<Root>/1D Lookup'
*/
{ -1.0, -0.99, -0.98, -0.96, -0.76, 0.0, 0.76, 0.96, 0.98, 0.99, 1.0 },
/* Variable: T2Break
* Referenced by: '<Root>/2D Lookup'
*/
{ 1.0, 2.0, 3.0 },
/* Variable: T2Data
* Referenced by: '<Root>/2D Lookup'
*/
{ 4.0, 16.0, 10.0, 5.0, 19.0, 18.0, 6.0, 20.0, 23.0 },
/* Expression: 2
* Referenced by: '<Root>/G1'
*/
2.0,
/* Expression: -2
* Referenced by: '<Root>/G2'
*/
-2.0,
/* Computed Parameter: uDLookup_maxIndex
* Referenced by: '<Root>/2D Lookup'
*/
{ 2U, 2U }
};
Поля структуры можно настроить во время выполнения кода, поскольку они занимают глобальную память. Однако на каждом этапе генерируемого алгоритма код должен вычислять выходной сигнал каждого блока, включая выходные сигналы блока G2 и восходящих блоков. Просмотр алгоритма в модели step функция в файле rtwdemo_paraminline.c.
cfile = fullfile(cgDir,'rtwdemo_paraminline_grt_rtw','rtwdemo_paraminline.c'); rtwdemodbtype(... cfile,'/* Model step function */','/* Model initialize function */',1,0);
/* Model step function */
void rtwdemo_paraminline_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Constant: '<Root>/Constant'
* Constant: '<Root>/Constant1'
* Gain: '<Root>/G1'
* Gain: '<Root>/G2'
* Inport: '<Root>/In1'
* Lookup_n-D: '<Root>/1D Lookup'
* Lookup_n-D: '<Root>/2D Lookup'
* Sum: '<Root>/Sum'
*/
rtwdemo_paraminline_Y.Out1 = rtwdemo_paraminline_P.G1_Gain *
rtwdemo_paraminline_U.In1 + rtwdemo_paraminline_P.G2_Gain * look2_binlx
(rtwdemo_paraminline_P.MAX_LIFT, look1_binlx
(rtwdemo_paraminline_P.SLIDER_POS, rtwdemo_paraminline_P.T1Break,
rtwdemo_paraminline_P.T1Data, 10U), rtwdemo_paraminline_P.T2Break,
rtwdemo_paraminline_P.T2Break, rtwdemo_paraminline_P.T2Data,
rtwdemo_paraminline_P.uDLookup_maxIndex, 3U);
}
Задать поведение параметра по умолчанию как Inlined.
set_param('rtwdemo_paraminline','DefaultParameterBehavior','Inlined')
Создайте код из модели.
slbuild('rtwdemo_paraminline')
### Starting build procedure for: rtwdemo_paraminline ### Successful completion of build procedure for: rtwdemo_paraminline Build Summary Top model targets built: Model Action Rebuild Reason ========================================================================================= rtwdemo_paraminline Code generated and compiled Global variable MAX_LIFT has changed. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.3625s
В отчете о создании кода просмотрите алгоритм в файле. rtwdemo_paraminline.c.
rtwdemodbtype(... cfile,'/* Model step function */','/* Model initialize function */',1,0);
/* Model step function */
void rtwdemo_paraminline_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/G1'
* Inport: '<Root>/In1'
* Sum: '<Root>/Sum'
*/
rtwdemo_paraminline_Y.Out1 = 2.0 * rtwdemo_paraminline_U.In1 + 150.0;
}
Код не выделяет память для параметров блоков или объектов параметров, использующих класс хранения Auto. Вместо этого генератор кода использует значения параметров из модели и из объектов параметров, чтобы вычислить и встроить постоянный вывод блочного G2. 150.0. Генератор также устанавливает значение параметра «Усиление» блока G1 «Усиление». 2.0.
При оптимизации сгенерированный код оставляет вычислительно дорогостоящий алгоритмический код для таких блоков, как таблицы поиска. Оптимизированный код вычисляет выходной сигнал блока, только если выходной сигнал может измениться во время выполнения. Для этой модели могут изменяться только выходные сигналы блока In1 «Inport», блока G1 «Gain» и блока «Sum».
Закройте модель и отчет о создании кода.
bdclose('rtwdemo_paraminline')
rtwdemoclean;
cd(currentDir)
Если для параметра Поведение по умолчанию (Default parameter behavior) задано значение Inlined, можно сохранить возможность настройки параметров блока, создав Simulink.Parameter для отдельных параметров. Можно настроить отображение каждого объекта в коде как настраиваемого поля структуры глобальных параметров или как отдельной глобальной переменной. Значения параметров можно изменять во время выполнения кода и связывать созданный код с собственным рукописным кодом. Дополнительные сведения см. в разделе Создание настраиваемого параметра калибровки в сгенерированном коде.
Опцию генерации кода Инлайн инвариантных сигналов (Inline invariant signals code generation) (которая также помещает постоянные значения в создаваемый код) можно выбрать только в том случае, если для параметра Поведение по умолчанию (Default parameter behavior) задано значение Inlined. См. раздел Встроенные инвариантные сигналы.
Поведение параметров по умолчанию