В этом примере показано, как сгенерировать исполняемый файл C из MATLAB® код с использованием MATLAB Coder™ приложения. В этом примере вы генерируете исполняемый файл для функции MATLAB, которая генерирует случайное скалярное значение. Используя приложение, вы:
Сгенерируйте пример C main
функция, которая вызывает сгенерированную функцию библиотеки.
Скопируйте и измените сгенерированные main.c
и main.h
.
Измените настройки проекта, чтобы приложение могло найти измененную main.c
и main.h
.
Сгенерируйте исполняемый файл.
Создайте функцию точки входа
В локальной папке с возможностью записи создайте функцию MATLAB, coderand
, который генерирует случайное скалярное значение из стандартного равномерного распределения на открытом интервале (0,1):
function r = coderand() %#codegen r = rand();
Создайте тестовый файл
В той же локальной папке с возможностью записи создайте файл MATLAB, coderand_test.m
, который вызывает coderand
.
function y = coderand_test()
y = coderand();
Откройте приложение MATLAB Coder
На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения MATLAB Coder.
Приложение открывает страницу Select Source Files.
Задайте исходные файлы
На странице Select Source Files введите или выберите имя функции точки входа coderand
.
Приложение создает проект с именем по умолчанию coderand.prj
в текущей папке.
Щелкните Next, чтобы перейти к Define Input Types шагу. Приложение анализирует функцию на проблемы с кодированием и готовность генерации кода. Если приложение определяет проблемы, оно открывает страницу Review Code Generation Readiness, на которой можно просмотреть и исправить проблемы. В этом примере, поскольку приложение не обнаруживает проблемы, он открывает страницу Define Input Types.
Определите входные типы
Поскольку C использует статическую типизацию, во время компиляции MATLAB Coder должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB Coder может вывести свойства всех переменных в файлах MATLAB.
В этом примере функция coderand
не имеет входов.
Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу.
Проверяйте на наличие проблем во время выполнения
Шаг Check for Run-Time Issues генерирует файл MEX из функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является необязательным. Однако лучшая практика выполнить этот шаг. Можно обнаружить и исправить ошибки времени выполнения, которые труднее диагностировать в сгенерированном коде C.
Чтобы открыть диалоговое окно Check for Run-Time Issues, щелкните стрелу Check for Issues.
Выберите или введите тестовый файл coderand_test
.
Нажмите Check for Issues.
Приложение генерирует MEX-функцию для coderand
. Он запускает тестовый файл, заменяя вызовы на coderand
с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации или выполнения MEX-функции, оно выдает предупреждения и сообщения об ошибке. Щелкните эти сообщения, чтобы перейти к проблемному коду и устранить проблему. В этом примере приложение не обнаруживает проблем.
Щелкните Next, чтобы перейти к Generate Code шагу.
Сгенерируйте C main
Функция
Когда вы генерируете исполняемый файл, вы должны предоставить основную функцию C/C + +. По умолчанию, когда вы генерируете исходный код C/C + +, статические библиотеки, динамически связанные библиотеки или исполняемые файлы, MATLAB Coder генерирует main
функция. Эта сгенерированная основная функция является шаблоном, который вы изменяете для своего приложения. Смотрите Включить сгенерированный код Используя Пример Основной Функции. После копирования и изменения сгенерированной основной функции можно использовать ее для генерации исполняемого файла C/C + +. Также можно написать свою собственную основную функцию.
Прежде чем вы сгенерируете исполняемый файл для coderand
, сгенерировать main
функция, которая вызывает coderand
.
Чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.
В диалоговом окне Generate установите Build type равным Source Code
и Language к C. Используйте значения по умолчанию для других настроек строения сборки проекта.
Нажмите More Settings.
На вкладке All Settings в разделе Advanced проверьте, что для Generate example main задано значение Generate, but do not compile, an example main function
. Нажмите Close.
Нажмите Generate.
MATLAB Coder генерирует main.c
файл и main.h
файл. Приложение указывает, что генерация кода выполнена успешно.
Щелкните 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
.
Измените сгенерированные основные файлы примера
В папке, которая содержит копию основных файлов примера, откройте main.c
.
Изменение main.c
так, чтобы он печатал результаты a coderand
вызов:
В main_coderand
, удалить линию
double r;
В main_coderand
, заменить
r = coderand()
printf("coderand=%g\n", coderand());
В данном примере, main
не имеет аргументов. В main
, удалите линии:
(void)argc; (void)argv;
Измените определение файла main
кому
int main()
Откройте main.h
Изменение main.h
:
Добавить stdio
к файлам включения:
#include <stdio.h>
Измените объявление главного на
extern int main()
Сгенерируйте исполняемый файл
Чтобы открыть страницу Generate Code, разверните шаги рабочего процесса и нажмите Generate
Чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.
Установите Build type значение Executable (.exe)
.
Нажмите More Settings.
На вкладке Custom Code, в Additional source files, введите main.c
На вкладке Custom Code, в Additional include directories, введите местоположение измененного main.c
и main.h
файлы. Для примера, c:\myfiles
. Нажмите Close.
Чтобы сгенерировать исполняемый файл, нажмите Generate.
Приложение указывает, что генерация кода выполнена успешно.
Щелкните Next, чтобы перейти к Finish Workflow шагу.
Под Generated Output можно увидеть расположение сгенерированного исполняемого файла coderand.exe
.
Запуск исполняемого файла
Запуск исполняемого файла в MATLAB в Windows® платформа:
system('coderand')
В этом примере вы создаете функцию MATLAB, которая генерирует случайное скалярное значение и основную функцию C, которая вызывает эту функцию MATLAB. Затем вы задаете типы для входных параметров функции, задаете основную функцию и генерируете исполняемый файл C для кода MATLAB.
Написание функции MATLAB, coderand
, который генерирует случайное скалярное значение из стандартного равномерного распределения на открытом интервале (0,1):
function r = coderand() %#codegen r = rand();
Написание основной функции 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"
.
Сконфигурируйте параметры генерации кода, чтобы включить основную функцию 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
операторы для заголовочных файлов, требуемых выбранной библиотекой замещения кода.
Когда вы генерируете исполняемый файл, вы должны предоставить main
функция. Для исполняемого файла C укажите файл C, main.c
. Для исполняемого файла C++ укажите файл C++, main.cpp
. Проверьте, что папка, содержащая основную функцию, имеет только один основной файл. В противном случае main.c
имеет приоритет над main.cpp
, что вызывает ошибку при генерации кода С++. Основной файл можно задать из диалогового окна параметров проекта, командной строки или диалогового окна Генерация кода.
По умолчанию, когда вы генерируете исходный код C/C + +, статические библиотеки, динамически связанные библиотеки или исполняемые файлы, MATLAB Coder генерирует main
функция. Эта сгенерированная основная функция является шаблоном, который вы изменяете для своего приложения. Смотрите Включить сгенерированный код Используя Пример Основной Функции. После копирования и изменения сгенерированной основной функции можно использовать ее для генерации исполняемого файла C/C + +. Также можно написать свою собственную основную функцию.
Когда вы преобразуете функцию MATLAB в библиотечную функцию C/C + + или исполняемый файл C/C + +, MATLAB Coder генерирует функцию инициализации и функцию завершения.
Если для вашего метода разбиения файлов задано значение, чтобы сгенерировать один файл для каждого файла MATLAB, вы должны включить функцию заголовка terminate в main.c
. В противном случае не включайте его в main.c
.
Для получения дополнительной информации о вызове функций инициализации и завершения смотрите Использование сгенерированных функций инициализации и завершения.
Чтобы открыть диалоговое окно Generate, на странице Generate Code щелкните стрелу Generate.
Нажмите More Settings.
На вкладке Custom Code установите:
Additional source files на имя исходного файла C/C + +, который содержит main
функция. Для примера, main.c
. Для получения дополнительной информации смотрите Определение основных функций для исполняемых файлов C/C + +.
Additional include directories к местоположению main.c
. Для примера, c:\myfiles
.
Установите CustomSource
и CustomInclude
свойства объекта строения генерации кода (см. «Работа с объектами строения»). The CustomInclude
свойство указывает местоположение файлов C/C + +, заданное CustomSource
.
Создайте объект строения для исполняемого файла:
cfg = coder.config('exe');
Установите CustomSource
свойство имени исходного файла C/C + +, содержащего main
функция. (Для получения дополнительной информации смотрите Определение основных функций для исполняемых файлов C/C + +.) Для примера:
cfg.CustomSource = 'main.c';
Установите CustomInclude
свойство к местоположению main.c
. Для примера:
cfg.CustomInclude = 'c:\myfiles';
Сгенерируйте исполняемый файл C/C + + с помощью опций командной строки. Для примера, если myFunction
принимает один входной параметр типа double
:
codegen -config cfg myMFunction -args {0}
MATLAB Coder компилирует и связывает основную функцию с кодом C/C + +, который он генерирует из myMFunction.m
.