Используйте coder.noImplicitExpansionInFunction
отключить неявное расширение в коде, сгенерированном для функции MATLAB путем призыва его в необходимой функции. Отключите неявное расширение, чтобы применить бинарные операции и функции без:
В этом примере, функции DisableImpExpinFunction
и ImpExpinFunction
добавьте два операнда совместимых размеров с идентичным кодом, но первый отключает неявное расширение. Код сгенерирован для DisableImpExpinFunction
не содержит дополнительный код, чтобы применить неявное расширение. Код сгенерирован для ImpExpinFunction
содержит циклы, которые должны быть выполнены, если операнды имеют совместимый размер и могут быть неявно расширены во времени выполнения.
В генерации кода сообщают для двух функций, размеров выражения, присваивающего out
значения отличаются.
Задайте функциональный DisableImpExpinFunction
это вычисляет сложение двух операндов без неявного расширения путем вызова coder.noImplicitExpansionInFunction
в необходимой функции.
function out = DisableImpExpinFunction(a,b)
coder.noImplicitExpansionInFunction;
out = a + b;
end
Задайте функциональный ImpExpinFuntion
это вычисляет сложение двух операндов с включенным неявным расширением.
function out = ImpExpinFunction(a,b)
out = a + b;
end
Задайте фиксированный размер и входной тип переменного размера для этих функций.
Сгенерируйте код для функций при помощи этих команд:
Code generation successful: To view the report, open('codegen/lib/DisableImpExpinFunction/html/report.mldatx')
Code generation successful: To view the report, open('codegen/lib/ImpExpinFunction/html/report.mldatx')
Сравните сгенерированный код для функций
Чтобы применить неявное расширение, сгенерированный код вводит дополнительный код, чтобы автоматически расширить операнды. Различие между сгенерированным кодом для двух функций показывают в этом коде.
//
// File: DisableImpExpinFunction.cpp
//
// MATLAB Coder version : 5.3
// C/C++ source code generated on : 25-Aug-2021 05:29:13
//
// Include Files
#include "DisableImpExpinFunction.h"
#include "coder_array.h"
// Function Definitions
//
// Arguments : const double a[2]
// const coder::array<double, 2U> &b
// double out[2]
// Return Type : void
//
void DisableImpExpinFunction(const double a[2],
const coder::array<double, 2U> &b, double out[2])
{
out[0] = a[0] + b[0];
out[1] = a[1] + b[1];
}
//
// File trailer for DisableImpExpinFunction.cpp
//
// [EOF]
//
//
// File: ImpExpinFunction.cpp
//
// MATLAB Coder version : 5.3
// C/C++ source code generated on : 25-Aug-2021 05:29:18
//
// Include Files
#include "ImpExpinFunction.h"
#include "coder_array.h"
// Function Definitions
//
// Arguments : const double a[2]
// const coder::array<double, 2U> &b
// coder::array<double, 2U> &out
// Return Type : void
//
void ImpExpinFunction(const double a[2], const coder::array<double, 2U> &b,
coder::array<double, 2U> &out)
{
int loop_ub;
out.set_size(2, b.size(1));
loop_ub = b.size(1);
for (int i{0}; i < loop_ub; i++) {
out[2 * i] = a[0] + b[2 * i];
out[2 * i + 1] = a[1] + b[2 * i + 1];
}
}
//
// File trailer for ImpExpinFunction.cpp
//
// [EOF]
//
Когда неявное расширение включено, сгенерированный код включает дополнительный код, чтобы изменить размер операндов, как замечено в ImpExpinFunction
. Если неявное расширение отключено, сгенерированный код не включает дополнительный код, чтобы применить любые изменения размера в операндах, как замечено в DisableImpExpinFunction
.
Сравните размер выходных переменных в отчете генерации кода. Выражение, присваивающее out
переменная в DisableImpExpinFunction
имеет размер 2x1
.
Выражение, присваивающее out
переменная в ImpExpinFunction
имеет размер 2x:?
.