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

Введение

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

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

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

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

| |

Похожие темы