Сворачивание выражения оптимизирует код, чтобы минимизировать расчет промежуточных результатов в блоке выходные параметры и устройство хранения данных таких результатов во временных буферах или переменных. Когда сворачивание выражения включено, коллапсы генератора кода (сгибы) блокируют расчеты в отдельное выражение, вместо того, чтобы генерировать отдельные операторы кода и объявления устройства хранения данных для каждого блока в модели. Большинство блоков Simulink поддерживает сворачивание выражения.
Сворачивание выражения повышает эффективность сгенерированного кода, часто достигая результатов, которые выдерживают сравнение с ручным оптимизированным кодом. Во многих случаях целые группы расчетов модели сворачиваются в одну, высоко оптимизированную строку кода.
Можно использовать выражение, сворачивающееся в собственных встроенных Блоках s-function. Для получения дополнительной информации смотрите S-функции Что Сворачивание Выражения Поддержки (Simulink Coder).
С выражением, сворачивающимся прочь, в explfld.c
файл, генератор кода генерирует этот код.
/* Model step function */ void exprfld_step(void) { /* Gain: '<Root>/Gain' incorporates: * Inport: '<Root>/In1' */ exprfld_B.S1 = exprfld_P.Gain_Gain * exprfld_U.i1; /* Gain: '<Root>/Gain1' incorporates: * Inport: '<Root>/In2' */ exprfld_B.S2 = exprfld_P.Gain1_Gain * exprfld_U.i2; /* Outport: '<Root>/Out1' incorporates: * Product: '<Root>/Product' */ exprfld_Y.Out1 = exprfld_B.S1 * exprfld_B.S2; }
Существуют отдельные операторы кода для обоих блоков Усиления. Перед окончательным результатом эти операторы кода вычисляют временные результаты для блоков Усиления.
Сворачивание выражения включено по умолчанию. Чтобы видеть, ли включено сворачивание выражения для существующей модели:
Сворачивание выражения доступно только, когда Configuration Parameters> параметр Signal storage reuse выбран, потому что сворачивание выражения работает только с выражениями, включающими локальные переменные. Включите параметр Signal storage reuse.
Когда вы выбираете Signal storage reuse, Enable local block outputs, Reuse local block outputs, и параметры Eliminate superfluous local variables (expression folding) - все на по умолчанию.
Со сворачиванием выражения генератор кода генерирует одну линию выходной расчет, как показано в expfld.c
файл. Сгенерированные комментарии документируют параметры блоков, которые появляются в выражении.
/* Model step function */ void exprfld_step(void) { /* Outport: '<Root>/Out1' incorporates: * Gain: '<Root>/Gain' * Gain: '<Root>/Gain1' * Inport: '<Root>/In1' * Inport: '<Root>/In2' * Product: '<Root>/Product' */ exprfld_Y.Out1 = exprfld_P.Gain_Gain * exprfld_U.i1 * (exprfld_P.Gain1_Gain * exprfld_U.i2); }
Для примера выражения, сворачивающегося в контексте более сложной модели, нажмите rtwdemo_slexprfold
, или в командной строке, введите:
rtwdemo_slexprfold
Для получения дополнительной информации смотрите, Включают и Повторное использование Локальный Блок Выходные параметры в Сгенерированном коде (Simulink Coder)
Устраните лишние локальные переменные (Сворачивание выражения) | Включите локальному блоку выходные параметры | Повторное использование локальный блок выходные параметры | Повторное использование памяти