В этом примере показано, как оптимизировать операции фиксированной точки в сгенерированном коде с помощью минимальных и максимальных значений, которые вы задаете в модели.
Минимальные и максимальные значения могут представлять экологические пределы или механические пределы, такие как выходные области значений датчиков. Программное обеспечение генерации кода может использовать эти значения, чтобы создать более эффективный код путем устранения недостижимых ветвей кода и ненужных служебных функций.
Примечание: необходимо гарантировать, что заданные минимальные и максимальные значения точны и защищены. В противном случае оптимизация может привести к числовому несоответствию с симуляцией.
Преимущества оптимизации сгенерированного кода:
Сокращение ROM и потребления RAM.
Улучшение скорости выполнения.
Откройте модель 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 27.819s
Отчет Генерации КОДА HTML открывается. Исследуйте код, соответствующий блоку "Product with reduced fraction length output data type". Щелкните правой кнопкой по этому блоку и выберите Code Generation> Navigate к коду....
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
. Эти функции состоят из многих строк кода и требуют нескольких временных переменных.
Дважды кликните желтую кнопку, чтобы открыть диалоговое окно Configuration Parameters.
В этом диалоговом окне, под Генерацией кода, выбирают Optimize с помощью, задал минимальные и максимальные значения.
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 12.106s
Щелкните правой кнопкой по блоку "Product with reduced fraction length output data type" и выберите Code Generation> Navigate к коду....
rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');
Сгенерированный код:
rtY.Out1 = rtU.In1 * rtU.In2 >> 10;
Используя заданные минимальные и максимальные значения, программное обеспечение генерации кода решает, что может безопасно реализовать уменьшенную дробную длину при выходе со сдвигом вправо и не генерирует служебные функции.
Исследуйте другие операции в сгенерированном коде, чтобы видеть, как программное обеспечение генерации кода использует заданные минимальные и максимальные значения. Программное обеспечение генерации кода теперь реализует каждую операцию фиксированной точки с простыми операциями C и устраняет ненужные функции помощника и ветви кода.