В этом примере показано, как использовать внешний код С в Системном объекте.
Системные объекты позволяют вам реализовывать использование алгоритмов MATLAB. Системные объекты являются специализированным видом объекта MATLAB, специально разработанного для реализации и симуляции динамических систем с входными параметрами то изменение в зависимости от времени.
После того, как вы зададите Системный объект, можно включать его в модель Simulink с помощью блока MATLAB System.
Блок MATLAB System использует Системный объект ExternalCCode это вызывает внешнюю функцию C extSum вычислить сумму его входных элементов. Блок Display показывает результат суммы значений от исходного блока.

Можно получить доступ к исходному коду MATLAB, используемому блоком MATLAB System путем нажатия на гиперссылку "Source code" от диалогового окна блока. Системный объект ExternalCCode реализует stepImpl метод, чтобы вычислить его выход. stepImpl вызывает внешнюю функцию C extSum сделать расчет. Системный объект наследовался coder.ExternalDependency класс и реализации следующие методы, чтобы использовать внешний код С.
getDescriptiveName - Возвратите имя, которое вы хотите сопоставить с внешней зависимостью
isSupportedContext - Возвратите true, если внешняя зависимость поддерживается в текущем контексте сборки
updateBuildInfo - Предоставьте дополнительную информацию, запрошенную, чтобы соединить внешний код
Системный объект также вызывает coder.cinclude от stepImpl метод, чтобы включать внешний заголовочный файл C sum.h.
classdef ExternalCCode < matlab.System & coder.ExternalDependency
% ExternalCCode Compute output by calling into external C Code
methods(Access = protected)
function y = stepImpl(~, a)
% Add header file sum.h to build
coder.cinclude('sum.h');
y = 0.0; %#ok<NASGU> % Pre-initialize y since coder cannot
% identify the type of output y from an
% external C function
% Call external C function to calculate sum of input elements
y = coder.ceval('extSum', coder.rref(a), int32(numel(a)));
end
end
methods(Static)
function bName = getDescriptiveName(~)
% Return a descriptive name for the external dependency. Code
% generator uses this name for error messages.
bName = 'SumAPI';
end
function tf = isSupportedContext(~)
% Use this function to determine whether current build context
% supports external dependency. Build context includes information
% about target language and code generation target.
tf = true;
end
function updateBuildInfo(buildInfo, ~)
% Add source file sum.c to build
buildInfo.addSourceFiles('sum.c');
end
end
end
Внешние C функционируют extSum задан в sum.c файле.
#include "sum.h"
double extSum(const double *a, int numElems)
{
int ii;
double sum = 0.0;
for (ii=0; ii < numElems; ii++) {
sum += a[ii];
}
return sum;
}
extSum объявляется в sum.h.
#ifndef SUM_H #define SUM_H extern double extSum(const double *a, int numElems); #endif
coder.ExternalDependency.updateBuildInfo | coder.ceval | coder.cinclude