coder.ExternalDependency class

Пакет: кодер
Суперклассы:

Интерфейс к внешнему коду

Описание

coder.ExternalDependency абстрактный класс для разработки интерфейса между внешним кодом и MATLAB® код предназначается для генерации кода. Можно задать классы, которые выводят из coder.ExternalDependency инкапсулировать интерфейс к внешним библиотекам, объектным файлам и исходному коду C/C++. Эта инкапсуляция позволяет вам разделять детали интерфейса из вашего кода MATLAB.

Задавать класс, выведенный из coder.ExternalDependency, создайте подкласс. Например:

classdef myClass < coder.ExternalDependency

Необходимо задать все методы, перечисленные в Методах. Эти методы являются статическими и не скомпилированы. Генератор кода вызывает эти методы в MATLAB после того, как генерация кода будет завершена, чтобы сконфигурировать сборку для сгенерированного кода. RTW.BuildInfo и coder.BuildConfig объекты, которые описывают информацию о сборке и создают контекст, автоматически создаются во время процесса сборки. updateBuildInfo метод обеспечивает доступ к этим объектам. Для получения дополнительной информации об индивидуальной настройке информации о сборке смотрите Индивидуальную настройку Процесса сборки (MATLAB Coder).

Вы также задаете методы, которые вызывают внешний код. Эти методы скомпилированы. Для каждой внешней функции, которую вы хотите вызвать, запишите метод, чтобы задать интерфейс программирования к функции. В методе использовать coder.ceval вызывать внешнюю функцию.

Методы

getDescriptiveNameВозвратите описательное имя для внешней зависимости
isSupportedContextОпределите, поддерживает ли контекст сборки внешнюю зависимость
updateBuildInfoОбновите информацию о сборке

Примеры

свернуть все

В этом примере показано, как инкапсулировать интерфейс к внешней динамически подключаемой библиотеке C с помощью coder.ExternalDependency.

Запишите функцию adder это возвращает сумму его входных параметров.

function c = adder(a,b)
%#codegen
c = a + b;
end

Сгенерируйте библиотеку, которая содержит adder.

codegen('adder','-args',{-2,5},'-config:dll','-report')

Запишите файл определения класса AdderAPI.m инкапсулировать интерфейс библиотеки.

%================================================================
% This class abstracts the API to an external Adder library.
% It implements static methods for updating the build information
% at compile time and build time.
%================================================================

classdef AdderAPI < coder.ExternalDependency
    %#codegen
    
    methods (Static)
        
        function bName = getDescriptiveName(~)
            bName = 'AdderAPI';
        end
        
        function tf = isSupportedContext(buildContext)
            if  buildContext.isMatlabHostTarget()
                tf = true;
            else
                error('adder library not available for this target');
            end
        end
        
        function updateBuildInfo(buildInfo, buildContext)
            % Get file extensions for the current platform
            [~, linkLibExt, execLibExt, ~] = buildContext.getStdLibInfo();
            
            % Add file paths
            hdrFilePath = fullfile(pwd, 'codegen', 'dll', 'adder');
            buildInfo.addIncludePaths(hdrFilePath);

            % Link files
            linkFiles = strcat('adder', linkLibExt);
            linkPath = hdrFilePath;
            linkPriority = '';
            linkPrecompiled = true;
            linkLinkOnly = true;
            group = '';
            buildInfo.addLinkObjects(linkFiles, linkPath, ...
                linkPriority, linkPrecompiled, linkLinkOnly, group);

            % Non-build files for packaging
            nbFiles = 'adder';
            nbFiles = strcat(nbFiles, execLibExt);
            buildInfo.addNonBuildFiles(nbFiles,'','');
        end
        
        %API for library function 'adder'
        function c = adder(a, b)
            if coder.target('MATLAB')
                % running in MATLAB, use built-in addition
                c = a + b;
            else
                % Add the required include statements to the generated function code
                coder.cinclude('adder.h');
                coder.cinclude('adder_initialize.h');
                coder.cinclude('adder_terminate.h');
                c = 0;
                
                % Because MATLAB Coder generated adder, use the
                % housekeeping functions before and after calling
                % adder with coder.ceval.

                coder.ceval('adder_initialize');
                c = coder.ceval('adder', a, b);
                coder.ceval('adder_terminate');
            end
        end
    end
end

Запишите функцию adder_main это вызывает внешнюю библиотечную функцию adder.

function y = adder_main(x1, x2)
    %#codegen
    y = AdderAPI.adder(x1, x2);
end

Сгенерируйте MEX-функцию для adder_main. MEX-функция осуществляет coder.ExternalDependency методы.

codegen('adder_main','-args',{7,9},'-report')

Скопируйте библиотеку в текущую папку с помощью расширения файла для платформы. Для Windows®Использование:

copyfile(fullfile(pwd,'codegen','dll','adder','adder.dll'));

Для Linux®Использование:

copyfile(fullfile(pwd,'codegen','dll','adder','adder.so'));

Запустите MEX-функцию и проверьте результат.

adder_main_mex(2,3)
Введенный в R2013b