Оптимизация фиксированной точки Используя заданные минимальные и максимальные значения

Этот пример показывает, как оптимизировать операции фиксированной точки в сгенерированном коде с помощью минимальных и максимальных значений, которые вы задаете в модели.

Обзор

Минимальные и максимальные значения могут представлять экологические пределы или механические пределы, такие как выходные области значений датчиков. Программное обеспечение генерации кода может использовать эти значения, чтобы создать более эффективный код путем устранения недостижимых ответвлений кода и ненужных служебных функций.

Примечание: необходимо гарантировать, что заданные минимальные и максимальные значения точны и защищены. В противном случае оптимизация может привести к числовому несоответствию с симуляцией.

Преимущества оптимизации сгенерированного кода:

  • Сокращение ROM и потребления RAM.

  • Улучшение скорости выполнения.

Открытая модель

Откройте модель fxpdemo_min_max_optimization.

open_system('fxpdemo_min_max_optimization');

Осмотрите модель

В этой модели существуют минимальные и максимальные значения, заданные во входных портах в восходящем направлении различных блоков фиксированной точки. Путем использования этих значений каждая операция фиксированной точки в модели оптимизирована в некотором роде.

Сгенерируйте код без оптимизации

Во-первых, не используя заданные минимальные и максимальные значения, сгенерируйте код для этой модели. Дважды кликните синюю кнопку.

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for model: fxpdemo_min_max_optimization
### Successful completion of code generation for model: fxpdemo_min_max_optimization

Осмотрите код без оптимизации

Отчет Генерации КОДА 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. Эти функции состоят из многих строк кода и требуют нескольких временных переменных.

Включите оптимизацию

  1. Дважды кликните желтую кнопку, чтобы открыть диалоговое окно Configuration Parameters.

  2. В этом диалоговом окне, под Генерацией кода, выбирают Optimize с помощью, задал минимальные и максимальные значения.

set_param('fxpdemo_min_max_optimization', 'UseSpecifiedMinMax', 'on');

Сгенерируйте код с оптимизацией

Теперь регенерируйте код с помощью заданных минимальных и максимальных значений.

Дважды кликните синюю кнопку.

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for model: fxpdemo_min_max_optimization
### Successful completion of code generation for model: fxpdemo_min_max_optimization

Исследуйте оптимизированный код

Щелкните правой кнопкой по блоку "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 и устраняет ненужные функции помощника и ответвления кода.