Генерация Автономных Исполняемых файлов C/C++ из кода MATLAB

Сгенерируйте исполняемый файл C Используя приложение MATLAB Coder

В этом примере показано, как сгенерировать исполняемый файл C из кода MATLAB® с помощью приложения MATLAB Coder™. В этом примере вы генерируете исполняемый файл для функции MATLAB, которая генерирует случайное скалярное значение. Используя приложение, вас:

  1. Сгенерируйте пример C main функция, которая вызывает сгенерированную библиотечную функцию.

  2. Скопируйте и измените сгенерированный main.c и main.h.

  3. Измените настройки проекта так, чтобы приложение могло найти модифицированный main.c и main.h.

  4. Сгенерируйте исполняемый файл.

Создайте функцию точки входа

В локальной перезаписываемой папке создайте функцию MATLAB, coderand, это генерирует случайное скалярное значение от стандартного равномерного распределения на открытом интервале (0,1):

function r = coderand() %#codegen
r = rand();

Создайте тестовый файл

В той же локальной перезаписываемой папке создайте файл MATLAB, coderand_test.m, это вызывает coderand.

function y = coderand_test()
y = coderand();

Откройте приложение MATLAB Coder

На вкладке MATLAB Toolstrip Apps, под Code Generation, кликают по значку приложения MATLAB Coder.

Приложение открывает страницу Select Source Files.

Задайте исходные файлы

  1. На странице Select Source Files введите или выберите имя функции точки входа coderand.

    Приложение создает проект с именем по умолчанию coderand.prj в текущей папке.

  2. Нажмите Next, чтобы перейти к шагу Define Input Types. Приложение анализирует функцию для кодирования готовность генерации кода и проблемы. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types.

Входные Define типы

Поскольку C использует статический контроль типов, во время компиляции, MATLAB Coder должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB Coder может вывести свойства всех переменных в файлах MATLAB.

В этом примере, функциональном coderand не имеет входных параметров.

Нажмите Next, чтобы перейти к шагу Check for Run-Time Issues.

Проверяйте на проблемы во время выполнения

Шаг Check for Run-Time Issues генерирует файл MEX от ваших функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является дополнительным. Однако это - лучшая практика выполнить этот шаг. Можно обнаружить и зафиксировать ошибки времени выполнения, которые более трудно диагностировать в сгенерированном коде C.

  1. Чтобы открыть диалоговое окно Check for Run-Time Issues, кликните по стреле Check for Issues.

    Выберите или введите тестовый файл coderand_test.

  2. Нажмите Check for Issues.

    Приложение генерирует MEX-функцию для coderand. Это запускает тестовый файл, заменяющий вызовы coderand с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Кликните по этим сообщениям, чтобы перейти к проблематичному коду и устранить проблему. В этом примере приложение не обнаруживает проблемы.

  3. Нажмите Next, чтобы перейти к шагу Generate Code.

Сгенерируйте main C Функция

Когда вы генерируете исполняемый файл, необходимо предоставить C/C++ основную функцию. По умолчанию, когда вы генерируете исходный код C/C++, статические библиотеки, динамически подключаемые библиотеки или исполняемые файлы, MATLAB Coder генерирует main функция. Эта сгенерированная основная функция является шаблоном, который вы изменяете для своего приложения. Смотрите Включают Сгенерированный код Используя Пример Основная Функция. После того, как вы скопируете и измените сгенерированную основную функцию, можно использовать ее в генерации исполняемого файла C/C++. В качестве альтернативы можно записать собственную основную функцию.

Прежде чем вы сгенерируете исполняемый файл для coderand, сгенерируйте main функция, которая вызывает coderand.

  1. Чтобы открыть диалоговое окно Generate, кликните по стреле Generate.

  2. В диалоговом окне Generate, набор Build type к Source Code и Language к C. Используйте значения по умолчанию в других настройках конфигурации сборки проекта.

  3. Нажмите More Settings.

  4. На вкладке All Settings, под Advanced, проверяют, что Generate example main установлен в Generate, but do not compile, an example main function. Нажмите Close.

  5. Нажмите Generate.

    MATLAB Coder генерирует main.c файл и main.h файл. Приложение указывает на ту генерацию кода, за которой следуют.

  6. Нажмите Next, чтобы открыть страницу Finish Workflow.

    На странице Finish Workflow, под Generated Output, вы видите тот main.c находится в подпапке coderand\codegen\lib\coderand\examples.

Скопируйте сгенерированный пример основные файлы

Поскольку последующая генерация кода может перезаписать сгенерированные файлы в качестве примера, прежде чем вы измените эти файлы, скопируете их в перезаписываемую папку за пределами codegen папка. В данном примере скопируйте main.c и main.h от подпапки coderand\codegen\lib\coderand\examples к перезаписываемой папке, например, c:\myfiles.

Измените сгенерированный пример основные файлы

  1. В папке, которая содержит копию примера основные файлы, открытый main.c.

     Сгенерированный main.c

  2. Измените main.c так, чтобы это распечатало результаты coderand вызов:

    • В main_coderand, удалите линию

      double r;

    • В main_coderandзамена

      r = coderand()
      с
      printf("coderand=%g\n", coderand());

    • В данном примере main не имеет аргументов. В main, удалите линии:

      (void)argc;
      (void)argv;

      Измените определение main к

      int main()

     Измененный main.c

  3. Открытый main.h

     Сгенерированный main.h

  4. Измените main.h:

    • Добавьте stdio к включать файлам:

      #include <stdio.h>

    • Измените объявление основного к

      extern int main()

 Измененный main.h

Сгенерируйте исполняемый файл

  1. Чтобы открыть страницу Generate Code, расширьте шаги рабочего процесса и нажмите Generate

  2. Чтобы открыть диалоговое окно Generate, кликните по стреле Generate.

  3. Установите Build type на Executable (.exe).

  4. Нажмите More Settings.

  5. На вкладке Custom Code, в Additional source files, вводят main.c

  6. На вкладке Custom Code, в Additional include directories, вводят местоположение модифицированного main.c и main.h файлы. Например, c:\myfiles. Нажмите Close.

  7. Чтобы сгенерировать исполняемый файл, нажмите Generate.

    Приложение указывает на ту генерацию кода, за которой следуют.

  8. Нажмите Next, чтобы перейти к шагу Finish Workflow.

  9. Под Generated Output вы видите местоположение сгенерированного исполняемого coderand.exe.

Запустите исполняемый файл

Запускать исполняемый файл в MATLAB на платформе Windows®:

system('coderand')

Сгенерируйте исполняемый файл C в командной строке

В этом примере вы создаете функцию MATLAB, которая генерирует случайное скалярное значение и основную функцию C, которая вызывает эту функцию MATLAB. Вы затем задаете типы для параметров входного параметра функции, задаете основную функцию и генерируете исполняемый файл C для кода MATLAB.

  1. Запишите функцию MATLAB, coderand, это генерирует случайное скалярное значение от стандартного равномерного распределения на открытом интервале (0,1):

    function r = coderand() %#codegen
    r = rand();
  2. Запишите основную функцию C, c:\myfiles\main.c, это вызывает coderand. Например:

    /*
    ** main.c
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include "coderand.h"
    #include "coderand_terminate.h"
    
    int main()
    {
        /* The initialize function is called automatically from the generated entry-point function. 
           So, a call to initialize is not included here. */ 
        
        printf("coderand=%g\n", coderand());
        
        coderand_terminate();
        
        return 0;
    }

    Примечание

    В этом примере, потому что метод разделения файла по умолчанию должен сгенерировать один файл для каждого файла MATLAB, вы включаете "coderand_terminate.h". Если ваш метод разделения файла собирается сгенерировать один файл для всех функций, не включайте "coderand_terminate.h".

  3. Сконфигурируйте свои параметры генерации кода, чтобы включать основной C, функционируют и затем генерируют исполняемый файл C:

    cfg = coder.config('exe');
    cfg.CustomSource = 'main.c';
    cfg.CustomInclude = 'c:\myfiles';
    codegen -config cfg coderand 

    codegen генерирует исполняемый файл C, coderand.exe, в текущей папке. Это генерирует вспомогательные файлы в папке по умолчанию, codegen/exe/coderand. codegen генерирует минимальный набор #include операторы для заголовочных файлов требуются выбранной заменяющей библиотекой кода.

Определение основных Функций для Исполняемых файлов C/C++

Когда вы генерируете исполняемый файл, необходимо обеспечить main функция. Для исполняемого файла C обеспечьте файл C, main.c. Для исполняемого файла C++ обеспечьте файл C++, main.cpp. Проверьте, что папка, содержащая основную функцию, имеет только один основной файл. В противном случае, main.c более приоритетен по сравнению с main.cpp, который вызывает ошибку при генерации Кода С++. Можно задать основной файл от диалогового окна настроек проекта, командной строки или диалогового окна Code Generation.

По умолчанию, когда вы генерируете исходный код C/C++, статические библиотеки, динамически подключаемые библиотеки или исполняемые файлы, MATLAB Coder генерирует main функция. Эта сгенерированная основная функция является шаблоном, который вы изменяете для своего приложения. Смотрите Включают Сгенерированный код Используя Пример Основная Функция. После того, как вы скопируете и измените сгенерированную основную функцию, можно использовать ее в генерации исполняемого файла C/C++. В качестве альтернативы можно записать собственную основную функцию.

Когда вы преобразуете функцию MATLAB в библиотечную функцию C/C++ или исполняемый файл C/C++, MATLAB Coder генерирует инициализировать функцию и оконечную функцию.

Задайте основные Функции

Определение основных Функций Используя Приложение MATLAB Coder

  1. Чтобы открыть диалоговое окно Generate, на странице Generate Code, кликают по стреле Generate.

  2. Нажмите More Settings.

  3. На вкладке Custom Code, наборе:

    1. Additional source files к имени исходного файла C/C++, который содержит main функция. Например, main.c. Для получения дополнительной информации смотрите Задающие основные Функции для Исполняемых файлов C/C++.

    2. Additional include directories к местоположению main.c. Например, c:\myfiles.

Определение основных Функций в Командной строке

Установите CustomSource и CustomInclude свойства объекта настройки генерации кода (см. Работу с Объектами Настройки). CustomInclude свойство указывает на местоположение файлов C/C++, заданных CustomSource.

  1. Создайте объект настройки для исполняемого файла:

    cfg = coder.config('exe');
    
  2. Установите CustomSource свойство к имени исходного файла C/C++, который содержит main функция. (Для получения дополнительной информации смотрите Задающие основные Функции для Исполняемых файлов C/C++.), Например:

    cfg.CustomSource = 'main.c';

  3. Установите CustomInclude свойство к местоположению main.c. Например:

    cfg.CustomInclude = 'c:\myfiles';

  4. Сгенерируйте исполняемый файл C/C++ использование параметров командной строки. Например, если myFunction берет входной параметр того типа double:

    codegen -config cfg  myMFunction -args {0}

    MATLAB Coder компилирует и соединяет основную функцию с кодом C/C++, который это генерирует от myMFunction.m.