В этом примере показано, как оптимизировать операции с фиксированной точкой в сгенерированном коде с помощью минимальных и максимальных значений, которые вы задаете в модели.
Минимальные и максимальные значения могут представлять пределы окружающей среды или механические пределы, такие как выходные области значений датчиков. Программное обеспечение генерации кода может использовать эти значения для создания более эффективного кода путем устранения недоступных ветвей кода и ненужных служебных функций.
Примечание: Вы должны убедиться, что указанные минимальное и максимальное значения точны и заслуживают доверия. В противном случае оптимизация может привести к численному несоответствию с симуляцией.
Преимущества оптимизации сгенерированного кода:
Уменьшение потребления ПЗУ и ОЗУ.
Улучшение скорости выполнения.
Откройте fxpdemo_min_max_optimization модели.
open_system('fxpdemo_min_max_optimization');
В этой модели существуют минимальное и максимальное значения, заданные во входных портах в восходящем направлении от различных блоков с фиксированной точкой. Используя эти значения, каждая операция с фиксированной точкой в модели оптимизируется в некотором роде.
Во-первых, не используя заданных минимального и максимального значений, сгенерируйте код для этой модели. Дважды кликните синюю кнопку.
rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization ### Successful completion of code generation for: fxpdemo_min_max_optimization Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================ fxpdemo_min_max_optimization Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 18.142s
Откроется отчет генерации кода HTML. Исследуйте код, относящийся к блоку «Продукт с уменьшенной длиной дроби выхода данных type». Щелкните правой кнопкой мыши по этому блоку и выберите Генерация Кода > Navigate to code....
rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');
Сгенерированный код:
rtY.Out1 = mul_u32_u32_u32_sr10(rtU.In1, rtU.In2);
Чтобы реализовать эту операцию умножения с фиксированной точкой, программное обеспечение генерации кода должно сгенерировать служебную функцию mul_u32_u32_u32_sr10
. Кроме того, для реализации mul_u32_u32_u32_sr10
, он должен сгенерировать вторую служебную функцию, mul_wide_u32
. Эти функции состоят из многих строк кода и требуют нескольких временных переменных.
Дважды кликните желтую кнопку, чтобы открыть диалоговое окно Параметров конфигурации.
В этом диалоговом окне в разделе Генерация кода выберите Оптимизировать с использованием заданных минимального и максимального значений.
set_param('fxpdemo_min_max_optimization', 'UseSpecifiedMinMax', 'on');
Теперь перегенерируйте код с помощью заданных минимального и максимального значений.
Дважды кликните синюю кнопку.
rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization ### Successful completion of code generation for: fxpdemo_min_max_optimization Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================== fxpdemo_min_max_optimization Code generated Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 8.4294s
Щелкните правой кнопкой мыши по блоку «Продукт с сокращенным типом выходных данных длины дроби» и выберите Генерация Кода > Navigate to code....
rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');
Сгенерированный код:
rtY.Out1 = rtU.In1 * rtU.In2 >> 10;
Используя заданные минимальное и максимальное значения, программное обеспечение генерации кода определяет, что оно может безопасно реализовать уменьшенную длину дроби на выходе со сдвигом вправо, и не генерирует служебных функций.
Исследуйте другие операции в сгенерированном коде, чтобы увидеть, как программное обеспечение генерации кода использует указанные минимальное и максимальное значения. Теперь программное обеспечение генерации кода реализует каждую операцию с фиксированной точкой с помощью простых операций C и устраняет ненужные вспомогательные функции и ветви кода.