Реализуйте Алгоритм который Вызовы Внешний код С

Введение

Этот пример показывает, как использовать внешний код С в Системном объекте.

Системные объекты

Системные объекты позволяют вам реализовывать использование алгоритмов 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

Смотрите также

| |

Похожие темы