Этот пример показывает, как произвести исполняемый файл 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
На вкладке Приложения MATLAB Toolstrip в разделе Создание кода щелкните значок приложения MATLAB Coder.
Приложение открывает страницу Выбор исходных файлов.
Указать исходные файлы
На странице «Выбор исходных файлов» введите или выберите имя функции точки входа. coderand.
Приложение создает проект с именем по умолчанию coderand.prj в текущей папке.
Нажмите кнопку Далее (Next), чтобы перейти к шагу Определить типы ввода (Define Input Types). Приложение анализирует функцию на предмет проблем кодирования и готовности к созданию кода. Если приложение выявляет проблемы, открывается страница «Проверка готовности к созданию кода», на которой можно просмотреть и устранить проблемы. В этом примере, поскольку приложение не обнаруживает проблем, открывается страница Определение типов ввода.
Определение типов ввода
Поскольку C использует статическую типизацию, во время компиляции кодер MATLAB должен определять свойства всех переменных в файлах MATLAB. Необходимо указать свойства всех входов функций точки входа. На основе свойств входных данных функции начального уровня кодер MATLAB может выводить свойства всех переменных в файлах MATLAB.
В этом примере функция coderand не имеет входных данных.
Нажмите кнопку Далее, чтобы перейти к шагу Проверка ошибок времени выполнения.
Проверка наличия проблем во время выполнения
Шаг Проверка ошибок времени выполнения создает файл MEX из функций начального уровня, запускает функцию MEX и сообщает о проблемах. Этот шаг необязателен. Однако рекомендуется выполнять этот шаг. Можно обнаруживать и исправлять ошибки времени выполнения, которые труднее диагностировать в сгенерированном коде C.
Чтобы открыть диалоговое окно Проверка на наличие проблем во время выполнения, щелкните стрелку Проверка на наличие проблем.![]()
Выберите или введите тестовый файл coderand_test.
Щелкните Проверить наличие проблем.
Приложение генерирует функцию MEX для coderand. Он запускает тестовый файл, заменяющий вызовы coderand с вызовами функции MEX. Если приложение обнаруживает проблемы во время создания или выполнения функции MEX, оно выдает предупреждения и сообщения об ошибках. Щелкните эти сообщения, чтобы перейти к проблемному коду и устранить проблему. В этом примере приложение не обнаруживает проблем.
Нажмите кнопку Далее, чтобы перейти к шагу Создать код.
Создание C main Функция
При создании исполняемого файла необходимо предоставить основную функцию C/C + +. По умолчанию при создании исходного кода C/C + +, статических библиотек, динамически связанных библиотек или исполняемых файлов кодер MATLAB создаетmain функция. Эта созданная основная функция является шаблоном, изменяемым для приложения. См. раздел Включение сгенерированного кода с использованием примера основной функции. После копирования и изменения созданной основной функции ее можно использовать для создания исполняемого файла C/C + +. Кроме того, можно создать собственную основную функцию.
Перед созданием исполняемого файла для coderand, создать main функция, вызывающая coderand.
Чтобы открыть диалоговое окно «Генерировать», щелкните стрелку «Генерировать».![]()
В диалоговом окне «Создание» задайте для параметра «Тип построения» значение Source Code и язык C. Используйте значения по умолчанию для других параметров конфигурации построения проекта.
Щелкните Дополнительные параметры.
На вкладке «Все параметры» в разделе «Дополнительно» убедитесь, что для параметра «Создать основной пример» установлено значение Generate, but do not compile, an example main function. Щелкните Закрыть (Close).
Щелкните Создать (Generate).
Кодер MATLAB генерирует main.c файл и main.h файл. Приложение указывает, что создание кода выполнено успешно.
Нажмите кнопку Далее, чтобы открыть страницу Завершить рабочий процесс.
На странице Завершить рабочий процесс (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 чтобы он печатал результаты 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()
Создание исполняемого файла
Чтобы открыть страницу Создать код, разверните шаги рабочего процесса
и щелкните Создать
Чтобы открыть диалоговое окно «Генерировать», щелкните стрелку «Генерировать».![]()
Задать для типа построения значение Executable (.exe).
Щелкните Дополнительные параметры.
На вкладке «Пользовательский код» в поле «Дополнительные исходные файлы» введите main.c
На вкладке «Пользовательский код» в поле «Дополнительные каталоги включения» введите местоположение измененного main.c и main.h файлы. Например, c:\myfiles. Щелкните Закрыть (Close).
Чтобы создать исполняемый файл, нажмите кнопку «» Создать «».
Приложение указывает, что создание кода выполнено успешно.
Нажмите кнопку Далее, чтобы перейти к шагу Завершить рабочий процесс.
В разделе Сгенерированный вывод (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 генерирует исполняемый файл Си, coderand.exe, в текущей папке. Он создает вспомогательные файлы в папке по умолчанию, codegen/exe/coderand. codegen генерирует минимальный набор #include инструкции для файлов заголовков, необходимых для выбранной библиотеки замены кода.
При создании исполняемого файла необходимо указать main функция. Для исполняемого файла C укажите файл C. main.c. Для исполняемого файла C++ укажите файл C++, main.cpp. Убедитесь, что папка, содержащая основную функцию, содержит только один основной файл. В противном случае main.c имеет приоритет над main.cpp, что приводит к ошибке при генерации кода C++. Основной файл можно указать в диалоговом окне параметров проекта, в командной строке или в диалоговом окне «Создание кода».
По умолчанию при создании исходного кода C/C + +, статических библиотек, динамически связанных библиотек или исполняемых файлов кодер MATLAB создает main функция. Эта созданная основная функция является шаблоном, изменяемым для приложения. См. раздел Включение сгенерированного кода с использованием примера основной функции. После копирования и изменения созданной основной функции ее можно использовать для создания исполняемого файла C/C + +. Кроме того, можно создать собственную основную функцию.
При преобразовании функции MATLAB в библиотечную функцию C/C + + или исполняемый файл C/C + + кодер MATLAB генерирует функцию инициализации и функцию завершения.
Если метод секционирования файлов настроен на создание одного файла для каждого файла MATLAB, необходимо включить функцию заголовка завершения в main.c. В противном случае не включайте его в main.c.
Дополнительные сведения о вызове функций инициализации и завершения см. в разделе Использование сгенерированных функций инициализации и завершения.
Чтобы открыть диалоговое окно «Генерация», на странице «Генерация кода» щелкните стрелку «Генерация».![]()
Щелкните Дополнительные параметры.
На вкладке «Пользовательский код» задайте:
Дополнительные исходные файлы к имени исходного файла C/C + +, содержащего main функция. Например, main.c. Дополнительные сведения см. в разделе Определение основных функций для исполняемых файлов C/C + +.
Дополнительно включают каталоги в расположение main.c. Например, c:\myfiles.
Установите CustomSource и CustomInclude свойства объекта конфигурации генерации кода (см. Работа с объектами конфигурации). 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 компилирует и связывает основную функцию с кодом C/C + +, который он генерирует изmyMFunction.m.