В этом примере показано, как оптимизировать операции с фиксированной точкой в сгенерированном коде с использованием минимальных и максимальных значений, заданных в модели.
Минимальное и максимальное значения могут представлять пределы окружающей среды или механические пределы, такие как диапазоны выходного сигнала датчиков. Программное обеспечение генерации кода может использовать эти значения для создания более эффективного кода, устраняя недостижимые ветви кода и ненужные функции утилиты.
Примечание.Необходимо убедиться, что указанные минимальное и максимальное значения являются точными и надежными. В противном случае оптимизация может привести к численному несоответствию с моделированием.
Преимущества оптимизации генерируемого кода:
Уменьшение потребления ПЗУ и ОЗУ.
Повышение скорости выполнения.
Откройте 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. Проверьте код, соответствующий блоку «Тип выходных данных продукта с уменьшенной длиной дроби». Щелкните правой кнопкой мыши по этому блоку и выберите «Создание кода» > «Перейти к коду»....
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
Щелкните правой кнопкой мыши по блоку «Product with reducted fraction length output data type» и выберите Code Generation > Navigate to code....
rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');
Генерируемый код:
rtY.Out1 = rtU.In1 * rtU.In2 >> 10;
Используя указанные минимальное и максимальное значения, программное обеспечение генерации кода определяет, что оно может безопасно реализовать уменьшенную длину дроби на выходе с правым сдвигом, и не генерирует функции полезности.
Проверьте другие операции в сгенерированном коде, чтобы узнать, как программное обеспечение генерации кода использует указанные минимальное и максимальное значения. Программное обеспечение для генерации кода теперь реализует каждую операцию с фиксированной точкой с простыми операциями C и устраняет ненужные вспомогательные функции и ветви кода.