Документация
Сгенерируйте код С из кода MATLAB
Этот пример использует:
Этот пример генерирует код С от Построения Синусоидальный Сигнал Используя Высокий энергетический Содействующий пример БПФ и создает исполняемый файл из сгенерированного кода.
Вот код MATLAB для этого примера:
Настройте компилятор
Вспыхните вычислительная часть алгоритма в функцию MATLAB
Сделайте код подходящим для генерации кода
Прежде чем вы сгенерируете код, необходимо подготовить код MATLAB к генерации кода.
Проверяйте проблемы во время проектирования
Анализатор кода обнаруживает проблемы кодирования во время проектирования, когда вы вводите код. Чтобы включить анализатор кода, необходимо добавить %#codegen прагма к вашему файлу MATLAB.
Инструмент готовности генерации кода экранирует код MATLAB на функции, которые не поддерживаются для генерации кода. Один из способов получить доступ к этому инструменту путем щелчка правой кнопкой по файлу MATLAB в его текущей папке. Работа инструмента генерации кода GenerateSignalWithHighEnergyFFTCoeffs.m не находит проблем.
Проверяйте проблемы во время генерации кода
Прежде чем вы сгенерируете код С, гарантируете, что код MATLAB успешно генерирует MEX-функцию. codegen (MATLAB Coder) команда раньше генерировала MEX-функцию, обнаруживает любые ошибки, которые предотвращают код для того, чтобы подойти для генерации кода.
Запущенный codegen on GenerateSignalWithHighEnergyFFTCoeffs.m функция.
Следующее сообщение появляется в командной строке MATLAB:
Проверяйте проблемы во время выполнения
Запустите сгенерированную MEX-функцию, чтобы видеть, существуют ли какие-либо проблемы во время выполнения, о которых сообщают. Для этого замена
Обвязка теперь похожа:
Код запускается успешно, указывая, что нет никаких ошибок времени выполнения.
Сравните MEX-функцию с симуляцией
Заметьте, что обвязка запускается намного быстрее с MEX-функцией по сравнению с регулярной функцией. Причина генерации MEX-функции не только, чтобы обнаружить генерацию кода и проблемы во время выполнения, но также и ускорить определенные части вашего алгоритма. Для примера смотрите Ускорение алгоритма Обработки сигналов в MATLAB.
Результаты соответствуют очень тесно, подтверждая, что генерация кода успешна.
Сгенерируйте независимый исполняемый файл
Регистрируйте все 1 000 систем координат входа и восстановленного сигнала, и количество коэффициентов БПФ раньше восстанавливало каждую систему координат сигнала. Запишите все эти данные в двоичный файл под названием data.bin использование dsp.BinaryFileWriter Система object™. Этот пример регистрирует количество коэффициентов, которые являются скалярными значениями как первый элемент каждой системы координат входного сигнала и восстановленного сигнала. Данные, которые будут записаны, имеют формат кадра M = L + 1 и имеют формат, который выглядит так фигура.
N является количеством коэффициентов БПФ, которые представляют 99,99% энергии сигнала текущего входного кадра. Метаданные двоичного файла указывают эту информацию. Выпустите средство записи двоичного файла и закройте двоичный файл в конце.
Следующий шаг в генерации исполняемого файла C должен создать a coder.config объект для исполняемого файла и обеспечивает a main.c функционируйте к этому объекту.
Вот то, как reconstructSignalTestbench_Main.c функция ищет этот пример.
Установите CustomInclude свойство настройки возражает, чтобы задать местоположение основного файла. В этом примере местоположение является текущей папкой.
Сгенерируйте исполняемый файл C путем выполнения следующей команды в командной строке MATLAB:
Считайте и проверьте данные о двоичном файле
Прототип заголовка должен иметь структуру, похожую на структуру заголовка, записанную в файл. Считайте данные как два канала.
Школа MATLAB. Урок 22. Автоматическая генерация исполняемого кода средствами MATLAB+Simulink
Введение
Модельно-ориентированное проектирование (МОП) — современный, эффективный и экономически выгодный метод разработки систем управления, мехатронных и робототехнических систем, обработки сигналов и изображений, построения систем связи, создания встраиваемых систем и пр.
При таком подходе к разработке новых систем вместо физических прототипов и текстовых спецификаций применяется исполняемая модель. Эта модель используется на всех этапах разработки системы или объекта, по ней разработчик проводит имитационное моделирование как всей системы целиком, так и ее отдельных компонентов. Конечным результатом МОП является автоматическая генерация исполняемого кода для управляющего контроллера.
В МОП систем управления разработка происходит в пять этапов:
Наиболее удобным инструментом для реализации МОП систем управления является среда MATLAB+Simulink. Имеющиеся в составе пакета Simulink приложения и библиотеки, как встроенные, так и подключаемые, дают разработчикам уникальные возможности по исследованию, проектированию и отладке систем управления реального времени.
Среда MATLAB+Simulink, помимо широких возможностей динамического моделирования сложных систем, состоящих из подсистем различной физической природы, предоставляет возможности по автоматической генерации С-кода. Генерация С-кода основана на применении пакетов расширений: Real-TimeWorkshop и Real-Time Workshop Embedded Code [10]. Сгенерированный исходный код может применяться для создания приложений, работающих в реальном времени вне среды MATLAB+Simulink, в том числе и для микропроцессоров встроенных систем.
В развитие технологий, изложенных в [3, 8, 9], предлагается методика генерации С-кода из модели Simulink, включающая следующие этапы:
В данной статье рассмотрим процесс создания исполняемого кода для контроллеров серии STM32F407/417 с помощью набора библиотечных модулей Waijung Blockset [11]. Указанная библиотека находится в открытом доступе в Интернете и интегрируется в MATLAB, для этого необходимо выполнить следующие действия:
По завершении установки библиотека и компилятор автоматически будут интегрированы в Simulink и MATLAB.
Также необходимо с сайта st.com загрузить, а затем установить утилиту STM32 ST-LINK Utility, посредством которой осуществляется связь между компьютером и контроллером.
Разработка алгоритма модельно-ориентированного проектирования в среде MATLAB+Simulink
Интегрированный в библиотеку компилятор генерирует исполняемый код для контроллеров серии STM32F0, STM32F407/417 и nRF51. На рис. 1 представлен набор библиотечных модулей для работы с периферийными устройствами контроллера.
Рис. 1. Набор библиотечных модулей Waijung Blockset
Для контроллера необходима библиотека STM32F4 Targеt, представленная на рис. 2.
Рис. 2. Набор библиотечных модулей STM32F4 Targеt
На предыдущем уроке (урок 21) была создана имитационная модель асинхронного электропривода, структурная схема которого представлена на рис. 3.
Рис. 3. Структурная схема асинхронного электропривода
Асинхронный электропривод состоит из асинхронного электродвигателя (М), инкрементного датчика контроля скорости (ДС), установленного на оси двигателя, силового полупроводникового преобразователя (VT), датчиков тока в фазах двигателя (ДТ), источника силового питания, состоящего из выпрямителя (VD) с фильтром (С), контроллера и ЭВМ. По последовательному каналу связи USART от ЭВМ на вход контроллера поступает задание по скорости, в ответ контроллер передает текущую скорость вала двигателя. Частота обмена информацией между контроллером и ЭВМ принята равной 100 Гц при скорости 115200 бит/с.
Имитационная модель электропривода в пакете Simulink с дискретными блоками в системе управления, которая реализуется в контроллере, представлена на рис. 4. Система управления представляет собой двухконтурную систему подчиненного регулирования, включающую контур регулирования тока и контур регулирования скорости, расчет которых был приведен на предыдущем уроке.
Рис. 4. Дискретная модель асинхронного электропривода
Дискретизация регуляторов потока и скорости [1, 2] проводилась исходя из периода программного цикла контроллера, равного 0,001 с. Графики переходных процессов представлены на рис. 5.
Рис. 5. Переходные процессы в асинхронном электроприводе
Создание исполняемого кода в среде Waijung Blockset
Ниже рассмотрен процесс по созданию исполняемого кода для электропривода с помощью элементов библиотеки Waijung Blockset. Разрабатываемая программа должна формировать импульсы управления силовыми ключами инвертора в функции заданной скорости вращения двигателя. При разработке исполняемого кода на базе рассмотренной модели необходимо перейти в библиотеку Waijung Blockset, далее на вкладку STM32F4 Target→Device Configuration и перенести блок Target Setup в окно модели. В окне настроек микроконтроллера, представленном на рис. 6, необходимо выполнить следующие действия.
Рис. 6. Окно настройки параметров микроконтроллера
Шаг 1. Настройка параметров микроконтроллера.
Далее нужно сохранить модель.
Примечание: В названии модели и в пути, где будет сохранена модель, категорически запрещается использовать русские символы и буквы.
Шаг 2. Настройка каналов аналого-цифрового преобразователя (АЦП), которые будут осуществлять чтение текущих токов в обмотках двигателя.
Для этого необходимо перейти в раздел библиотеки STM32F4 Target→On-chip Peripherals→ADC и перенести блок Regular ADC в окно модели. Двойной щелчок левой кнопки мышки по блоку открывает окно настроек АЦП микроконтроллера, представленное на рис. 7.
Рис. 7. Окно настроек АЦП
В микроконтроллере STM32F4DISCOVERY имеется два 16-канальных АЦП (ADC Module 1 и 2) и один восьмиканальный АЦП (ADC Module 3). Все АЦП могут опрашивать входы, перечисленные в окне настроек, т. о. контроллер тремя АЦП может опрашивать до 16 каналов.
В открывшем окне необходимо выполнить следующие операции:
Выходом АЦП является цифровой код, пропорциональной входному напряжению. Для перехода от цифрового кода к напряжению нужно выполнить преобразование:
где ANi — выходной сигнал с АЦП.
Таким образом, после каждого выхода АЦП нужно поставить элемент Gain из библиотеки Simulink→MathOperations.
Ток в обмотках двигателя протекает в двух направлениях, следовательно, в схеме измерения тока введено смещение нуля датчика тока на уровне 2,5 В. Таким образом, максимальное значение для положительного направления тока равно 5 В, максимальное значение для отрицательного тока — 0 В. После компенсации смещения нуля и масштабирования напряжения с АЦП (коэффициент Km) итоговая модель измерения тока примет вид, представленный на рис. 8.
Рис. 8. Модель измерения тока
Шаг 3. Настройка таймера, отвечающего за обработку инкрементного датчика положения.
Измерение текущего угла и скорости двигателей часто осуществляется при помощи инкрементных энкодеров фотоэлектрического типа. В связи с чем в библиотеке Waijung Blockset присутствует блок обработки сигналов энкодера. Инкрементный энкодер формирует импульсы при вращении вала датчика. Этот тип энкодеров, в отличие от абсолютных энкодеров, работающих в коде Грея, не формирует выходные импульсы, когда его вал находится в покое.
Инкрементный оптический энкодер состоит из следующих компонентов: источника света, диска с метками, фототранзисторной сборки и схемы обработки сигнала. Диск инкрементного энкодера разделен на точно позиционированные прозрачные и непрозрачные области (метки). Количество отметок определяет количество импульсов за один оборот. К примеру, если диск поделен на 1000 меток, тогда за 250 импульсов вал должен повернуться на 90°.
Используемый в данном случае инкрементный 5-В датчик CFS50-AFV11X08 имеет на выходе разностные сигналы A, –A, В, –B, N и –N и 2048 отчетов на оборот, где сигналы –A, –B и –N являются инверсными сигналами по отношению к A, B и N. Сигналы A и B сдвинуты по фазе на 90° относительно друг друга. У инкрементного 5-В датчика дорожки A и B используются для счета. Дорожка N используется при соответствующей параметризации для установки счетчика на загружаемое значение. Датчики с этими шестью сигналами называются симметричными. На рис. 9 показана временная последовательность этих сигналов.
Рис. 9. Временная последовательность импульсов инкрементного датчика
Шаг 4. Анализ импульсов.
DSP-контроллеры могут подсчитывать фронты сигналов посредством таймеров. Обычно анализируется фронт на A ( –A) (однократный анализ). Для получения более высокого разрешения, путем параметризации, может быть использован однократный, двойной или четырехкратный анализ.
Множественный анализ возможен только у инкрементных 5-В датчиков с сигналами A и B, сдвинутыми на 90°, или у инкрементных 24-В датчиков с сигналами A* и B*, сдвинутыми на 90°.
Однократный анализ означает, что анализируется только один фронт A; импульсы прямого счета регистрируются при нарастающем фронте на A и низком уровне сигнала на B, а импульсы обратного счета регистрируются при падающем фронте на A и низком уровне сигнала на B. На рис. 10 показан однократный анализ сигналов.
Рис. 10. Однократный анализ сигналов инкрементного датчика
Двойной анализ означает, что анализируются нарастающий и падающий фронт сигнала A; генерируются ли импульсы прямого или обратного счета, зависит от уровня сигнала B. На рис. 11 показан двойной анализ сигналов.
Рис. 11. Двукратный анализ сигналов инкрементного датчика
Четырехкратный анализ означает, что анализируются нарастающий и падающий фронты A и B; генерируются ли импульсы прямого или обратного счета, зависит от уровней сигналов A и B. На рис. 12 показан четырехкратный анализ сигналов.
Рис. 12. Четырехкратный анализ сигналов инкрементного датчика
В DSP-контроллерах STM32 используется четырехкратный анализ сигналов, что позволяет программно увеличить точность определения положения в четыре раза.
Датчик обратной связи по скорости (инкрементный оптический энкодер) имеет 2048 отчетов (меток) на оборот. Как правило, блоки, реализующие обработку сигналов с инкрементных датчиков, строятся на таймерах. Для настройки таймера, реализующего алгоритм обработки датчика оси, необходимо перейти в раздел библиотеки STM32F4 Target→On-chip Peripherals→TIM и перенести блок Encoder Read в окно модели. Двойной щелчок левой кнопки мыши по блоку открывает окно настроек АЦП микроконтроллера, представленное на рис. 13.
Рис. 13. Окно настроек таймера
В этом элементе необходимо задать два параметра:
Выходными сигналами с блока Encoder Read будут: направление вращения (Direction), принимающее два значения («+1» и «–1»), а также число пройденных отчетов (Position (count)). Следует отметить, что при первом включении инкрементного датчика его текущее положение будет принято нулевым, и уже от него будет производиться отсчет пройденных меток. Таким образом, без дополнительных программных мер (выставка нулевого положения датчика относительно ротора двигателя) при каждом включении датчик будет принимать новое нулевое положение за исходное. На рис. 14 представлена модель расчета скорости.
Рис. 14. Модель расчета скорости
Подсистема Speed Estimate представлена на рис. 15.
Рис. 15. Подсистема Speed Estimate
Выходом Position (count) таймера является число отчетов, которое прошел датчик за интервал времени измерения, программно умноженное на 4 (программное увеличение точности измерений). В блоках MATLAB Function [4] из библиотеки Simulink→User-Defined Functions прописываются функции. При открытии данного блока запускается Matlab Editor, в котором необходимо набрать текст программы. Функция Encoder2Angel переводит количество отчетов, выданных таймером, в угол в радианах. Текст программы имеет вид:
Функция Angel2Speed производит расчет скорости прямым методом Эйлера с пропуском моментов времени, когда показания датчика обнуляются. Текст программы имеет вид:
Коэффициент Gain пропорционален периоду программного цикла контроллера и определяется как 1/Ts, где Ts — период программного цикла. В данном случае Gain = 1000.
Блок Unit Delay из библиотеки Simulink→Discrete задает задержку на один шаг расчета, для чего в открывшемся окне свойств блока в поле Sample time необходимо записать период программного цикла контроллера (0,001).
Шаг 5. Настройка канала последовательной передачи данных RS232.
Для настройки канала передачи данных необходимо перейти в раздел библиотеки STM32F4 Target→On-chip Peripherals→UART и перенести все находящиеся там блоки в окно модели. На рис. 16 представлены окна настройки параметров канала связи (UART Setup), передатчика (UART Tx) и приемника (UART Rx).
Рис. 16. Настройка параметров последовательного канала связи
В окне UART Setup в выпадающем меню UART Module необходимо указать номер канала последовательного порта контроллера, по которому будет производиться обмен информацией (в данном случае будем использовать порт 3). В поле Baud rate требуется указать скорость передачи данных, а остальные поля оставим по умолчанию. Передача данных из контроллера будет производиться через порт D8, прием данных контроллером — через порт D9.
В окне UART Tx в выпадающем меню UART Module укажем номер канала контроллера, по которому будет производиться передача данных (механическая скорость ротора). В выпадающем меню выбора режима работы передатчика Transfer выберем режим Blocking (передача данных после приема). В выпадающем меню Packet mode (формат передачи данных) выберем ASCII. В поле ASCII format укажем формат передаваемых данных, в нашем случае это символьный (‘%f’). В выпадающем меню End of packet нужно указать форму окончания пакета, в нашем случае — перевод курсора, перевод строки («\r\n»). В поле Simple time зададим период передачи данных.
В окне UART Rx в выпадающем меню UART Module указывается номер канала контроллера, по которому будет производиться прием данных (заданная скорость). В выпадающем меню выбора режима работы передатчика Transfer выберем режим Blocking (передача данных после приема). В выпадающем меню Packet mode (формат передачи данных) выберем ASCII. В поле ASCII format укажем формат передаваемых данных, в нашем случае это символьный (‘%f’). В выпадающем меню End of packet нужно указать форму окончания пакета, в нашем случае перевод строки («\n»). В поле Simple time зададим период передачи данных.
Так как в приемнике и передатчике канала связи формат данных указан как символьный, следовательно, необходима конвертация полученных/принятых данных в требуемый формат посредством блока Data Type Conversion из библиотеки Commonly Used Blocks Simulink. В окне свойств блока Data Type Conversion в выпадающем меню Output data type следует выбрать Inherit: Inherit via back propagation.
Шаг 6. Настройка широтно-импульсной модуляции.
Управление фазными токами в обмотках двигателя осуществляется посредством широтно-импульсной модуляции (ШИМ) режима работы силовых ключей инвертора. Для настройки ШИМ необходимо перейти в раздел библиотеки STM32F4 Target→On-chip Peripherals→TIM и перенести блок Advanved PWM в окно модели. На рис. 17 представлено окно настройки параметров ШИМ.
Рис. 17. Окно настройки параметров ШИМ
В выпадающем меню Timer необходимо выбрать TIM8, т. к. первый таймер используется для обработки сигналов инкрементного датчика. В окне PWM Period зададим требуемую частоту ШИМ. В нашем случае частота ШИМ 10 кГц, что соответствует периоду 1e–4с. В выпадающем меню Output Channel 2 Pulse выберем значение Polarity HIGH and SET when idle; в выпадающем меню Output Channel 2N Pulse — значение Polarity LOW and SET when idle; в выпадающем меню Output Channel 3 Pulse — значение Polarity HIGH and SET when idle; в выпадающем меню Output Channel 3N Pulse — значение Polarity LOW and SET when idle.
Итоговая модель системы управления представлена на рис. 18.
Рис. 18. Модель системы управления
Теперь, при нажатии кнопки Build Model, будет запущен процесс автоматической генерации исполняемого кода для микроконтроллера, его компиляции и записи программы в контроллер (если он подключен к компьютеру), представленный на рис. 19.
Рис. 19. Генерация исполняемого кода
По окончании процесса компиляции сгенерированный код будет записан в управляющий контроллер и сохранен в папке проекта.
Заключение
На примере асинхронного электропривода рассмотрены этапы МОП, включающие в себя переоборудование непрерывной системы управления в цифровой аналог в пакете Simulink. С использованием внешней библиотеки Waijung и средств среды MATLAB+Simulink цифровая модель системы управления привязана к конкретному контроллеру и периферийным устройствам (АЦП, датчики и пр.). Осуществлена компиляция кода и загрузка его в контроллер, работающий в режиме реального времени.
МОП является простым и удобным инструментарием, позволяющим разработчику в сжатые сроки разработать структуру системы управления, провести ее модельное тестирование и генерировать по ней исполняемый код для контроллера.
codegen
Generate C/C++ code from MATLAB code
Syntax
Description
Examples
Generate a MEX Function from a MATLAB Function
Write a MATLAB function mcadd that returns the sum of two values.
At the MATLAB command line, run this codegen command.
The code generator produces a MEX file mcadd_mex in the current working folder.
The actual values of these example inputs are not relevant for code generation. Any other pair of values with the same properties (class, size, and complexity) results in the same generated code. See Specify Properties of Entry-Point Function Inputs.
Running the MATLAB function mcadd with these input values produces the same output. This test case verifies that mcadd and mcadd_mex have the same behavior.
Generate a MEX Function from a MATLAB Function That Has Multiple Signatures
Write a MATLAB function myAdd that returns the sum of two values.
At the MATLAB command line, run this codegen command.
Generate C Static Library Files in a Custom Folder
Generate an Executable
Configure your code generation parameters to include the main C function, then generate the C executable.
Generate Code That Uses a Variable-Size Input
Write a MATLAB function that takes a single input.
Use coder.typeof to define an input type as a row vector of doubles with a maximum size of 1-by-16, with the second dimension variable-size.
Generate a C static library.
Generate Code That Uses Global Data
Alternatively, you can initialize the global data in the MATLAB workspace. At the MATLAB prompt, enter:
Generate the MEX function.
Generate Code That Accepts an Enumerated Type Input
Create a coder.EnumType object using a value from an existing MATLAB enumeration.
Create a coder.EnumType object from this enumeration.
Generate a Static Library That Accepts a Fixed-Point Input
Generate a Static C++ Library That Accepts Half-Precision Inputs
Write a MATLAB function foo that returns the sum of two values.
At the MATLAB command line, run this codegen command.
The generated code in this example converts half-precision inputs to single-precision, performs the addition operation in single-precision, and converts the result back into half-precision.
Convert Floating-Point MATLAB Code to Fixed-Point C Code
This example requires Fixed-Point Designer™.
Set the test bench name.
Create a code generation configuration object to generate a standalone C static library.
Convert codegen command to equivalent MATLAB Coder project
Generate code from myadd_project.prj by using another codegen command.
The code generator produces a C++ static library function myadd in the work \codegen\lib\myadd folder, where work is your current working directory.
Input Arguments
options — Code generation options
option value | space delimited list of option values
The codegen command gives precedence to individual command-line options over options specified by a configuration object. If command-line options conflict, the rightmost option prevails. The order of the options and the other syntax elements is interchangeable.
Specified as one or more of these values:
Generate C/C++ code, but do not invoke the make command.
Generate a dynamic C/C++ library using the default configuration parameters.
Generate a static C/C++ executable using the default configuration parameters.
Generate a static C/C++ library using the default configuration parameters.
Generate a MEX function using the default configuration parameters.
Generate single-precision MATLAB code using the default configuration parameters.
Requires Fixed-Point Designer.
Specify the configuration object that contains the code generation parameters. config_object is one of the following configuration objects:
coder.CodeConfig — Parameters for standalone C/C++ library or executable generation if Embedded Coder ® is not available.
coder.EmbeddedCodeConfig — Parameters for a standalone C/C++ library or executable generation if Embedded Coder is available.
coder.MexCodeConfig — Parameters for MEX code generation.
Spaces, as spaces can lead to code generation failures in certain operating system configurations.
Non 7-bit ASCII characters, such as Japanese characters,
If the folder specified by out_folder does not exist, codegen creates it.
If you do not specify the folder location, codegen generates files in the default folder:
mex for MEX functions
exe for embeddable C/C++ executables
lib for embeddable C/C++ libraries
dll for C/C++ dynamic libraries
fcn_name is the name of the first MATLAB function (alphabetically) at the command line.
The function does not support the following characters in folder names: asterisk (*), question-mark (?), dollar ($), and pound (#).
Note
Each time codegen generates the same type of output for the same code, it removes the files from the previous build. If you want to preserve files from a previous build, before starting another build, copy them to a different location.
fcn_name is the name of the entry-point function.
mex for MEX functions
exe for embeddable C/C++ executables
lib for embeddable C/C++ libraries
dll for C/C++ dynamic libraries
singlesuffix is the suffix that the coder.SingleConfig property OutputFileNameSuffix specifies. The single-precision files in this folder also have this suffix.
For more information, see Generate Single-Precision MATLAB Code. You must have Fixed-Point Designer to use this option.
mex for MEX functions
exe for embeddable C/C++ executables
lib for embeddable C/C++ libraries
dll for C/C++ dynamic libraries
fcn_name is the name of the entry-point function.
For more information, see Convert MATLAB Code to Fixed-Point C Code. You must have Fixed-Point Designer to use this option.
Specify whether to use the debug option for the C compiler. If you enable debug mode, the C compiler disables some optimizations. The compilation is faster, but the execution is slower.
Specify names and initial values for global variables in MATLAB files.
global_values is a cell array of global variable names and initial values. The format of global_values is:
gn is the name of a global variable specified as a character vector. initn is the initial value. For example:
Alternatively, use this format:
MATLAB Coder and MATLAB each have their own copies of global data. For consistency, synchronize their global data whenever the two interact. If you do not synchronize the data, their global variables can differ.
Add include_path to the beginning of the code generation path. When codegen searches for MATLAB functions and custom C/C++ files, it searches the code generation path first. It does not search for classes on the code generation path. Classes must be on the MATLAB search path. For more information, see Paths and File Infrastructure Setup.
If the path contains characters that are not 7-bit ASCII, such as Japanese characters, it is possible that codegen does not find files on this path.
If your include_path contains paths that contain spaces, enclose each instance in double quotes, for example:
Use just-in-time (JIT) compilation for generation of a MEX function. JIT compilation can speed up MEX function generation. This option applies only to MEX function generation. This option is not compatible with certain code generation features or options, such as custom code or using the OpenMP library.
Specify the language to use in the generated code as C.
If you do not specify any target language, the code generator produces C code.
Specify the language to use in the generated code as C++.
Generate the MEX function, C/C++ library, or C/C++ executable file with the base name output_file_name plus an extension:
.exe or no extension for C/C++ executables
.dll for C/C++ dynamic libraries on Microsoft ® Windows ® systems
.so for C/C++ dynamic libraries on Linux ® systems
.dylib for C/C++ dynamic libraries on Mac systems
Platform-dependent extension for generated MEX functions
output_file_name can be a file name or include an existing path. output_file_name must not contain spaces, as spaces can lead to code generation failures in certain operating system configurations.
For MEX functions, output_file_name must be a valid MATLAB function name.
Optimize generated code, based on the value of optimization_option :
enable:inline — Enable function inlining.
disable:inline — Disable function inlining. To learn more about function inlining, see Control Inlining to Fine-Tune Performance and Readability of Generated Code.
If not specified, codegen uses inlining and OpenMP for optimization.
This packaging functionality is also provided by the packNGo function.
Generate code that uses N-dimensional indexing. For more information, see Generate Code That Uses N-Dimensional Indexing.
Enable profiling of generated MEX function by using the MATLAB Profiler. For more information, see Profile MEX Functions by Using MATLAB Profiler.
If you have Embedded Coder, this option also enables production of the Code Replacements report.
Export information about code generation to the variable info in your base MATLAB workspace. See Access Code Generation Report Information Programmatically.
Generate code that uses row-major array layout. Column-major layout is the default. For more information, see Generate Code That Uses Row-Major Array Layout.
If code generation succeeds without warning, suppress all messages, including when you generate a report.
Warning and error messages are displayed.
Generate single-precision C/C++ code. For more information, see Generate Single-Precision C Code at the Command Line.
You must have Fixed-Point Designer to use this option.
Use the C89/90 (ANSI) language standard for the generated code.
Use the C99 (ISO) language standard for the generated code.
Use the C++03 (ISO) language standard for the generated code. You can use this library only if you generate C++ code.
Use the C++11 (ISO) language standard for the generated code. You can use this library only if you generate C++ code.
When using this option, the MEX file and the files containing the entry-point functions must be located in the same folder.
This option is not supported with fixed-point conversion or single-precision conversion.
Enable verbose mode to show code generation status and target build log messages.