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

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

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

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

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

  3. Измените настройки проекта так, чтобы приложение могло найти измененный main.c и main.h 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, под Генерацией кода, кликают по значку приложения MATLAB CODER.

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

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

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

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

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

Задайте входные типы

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

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

Нажмите Далее, чтобы перейти к Проверке на шаг Проблем Во время выполнения.

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

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

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

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

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

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

  3. Нажмите Далее, чтобы перейти к Сгенерировать шагу Кода.

Сгенерируйте функцию main C

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

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

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

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

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

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

  5. Нажмите Generate.

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

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

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

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

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

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

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

     Сгенерированное основное. 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()

     Измененное основное. c

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

     Сгенерированное основное. h

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

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

      #include <stdio.h>

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

      extern int main()

 Измененное основное. h

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

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

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

  3. Установите тип Сборки на Executable (.exe).

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

  5. На вкладке Custom Code, в Дополнительных исходных файлах, вводят main.c

  6. На вкладке Custom Code, в Дополнительном включают директории, вводят местоположение измененного main.c и файлов main.h. Например, c:\myfiles. Нажмите Close.

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

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

  8. Нажмите Далее, чтобы перейти к шагу Рабочего процесса Конца.

  9. При Сгенерированном Выводе вы видите местоположение сгенерированного исполняемого 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_initialize.h"
    #include "coderand_terminate.h"
    
    int main()
    {
        coderand_initialize();
        
        printf("coderand=%g\n", coderand());
        
        coderand_terminate();
        
        return 0;
    }

    Примечание

    В этом примере, потому что метод разделения файла по умолчанию должен сгенерировать один файл для каждого файла MATLAB, вы включаете "coderand_initialize.h" и "coderand_terminate.h" h. Если ваш метод разделения файла собирается сгенерировать один файл для всех функций, не включайте "coderand_initialize.h" и "coderand_terminate.h" 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++ обеспечьте файл C++, main.cpp. Проверьте, что папка, содержащая основную функцию, имеет только один основной файл. В противном случае main.c более приоритетен по сравнению с main.cpp, который вызывает ошибку при генерации Кода С++. Можно задать основной файл от диалогового окна настроек проекта, командной строки или диалогового окна Code Generation.

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

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

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

  • Необходимо вызвать эти функции наряду с функцией C/C++. Для получения дополнительной информации смотрите, что Вызов Инициализирует и Отключает Функции.

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

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

  1. Чтобы открыть диалоговое окно Generate, на Сгенерировать Кодовой странице, нажимают стрелку Generate.

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

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

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

    2. Дополнительный включают директории в местоположение main.c 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 c. Например:

    cfg.CustomInclude = 'c:\myfiles';

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

    codegen -config cfg  myMFunction -args {0}

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

Была ли эта тема полезной?