Вы можете вызвать внешний код С из Simulink® моделировать с использованием блока MATLAB Function. Следуйте этим шагам высокого уровня:
Начните с существующего кода С, состоящего из источника (.c) и заголовок (.h) файлы.
В блоке MATLAB Function введите MATLAB® код, который вызывает код С Используйте coder.ceval функция. Чтобы передать данные по ссылке, используйте coder.ref, coder.rref, или coder.wref.
Укажите исходный код и заголовочные файлы для симуляции на панели Simulation Target диалогового окна Model Configuration Parameters. Включите заголовочный файл с помощью двойных кавычек, например #include "program.h". Если вам нужно получить доступ к исходным и заголовочным файлам C вне рабочей папки, перечислите путь в панели Simulation Target, в Include Directories текстовом поле.
Кроме того, используйте coder.cinclude и coder.updateBuildInfo функции для определения исходного кода и файлов заголовков в коде MATLAB. Для разработки интерфейса к внешнему коду можно использовать coder.ExternalDependency класс. Чтобы увидеть, какой рабочий процесс поддерживается, см. Раздел «Импорт пользовательского кода».
Протестируйте свою модель Simulink и убедитесь, что она работает правильно.
Если у вас есть лицензия Simulink Coder™, можно сгенерировать код для целей с помощью этого метода. Чтобы использовать те же исходные файлы и файлы заголовков для генерации кода, нажмите Use the same custom code settings as Simulation Target на панели Code Generation > Custom Code. Можно также задать различные исходные файлы и файлы заголовков.
Чтобы обусловить свой код, чтобы выполнить другие команды для симуляции и генерации кода, можно использовать coder.target функция.
coder.ceval в блоке MATLAB functionВ этом примере показано, как вызвать простую программу C doubleIt из блока MATLAB Function.
Создайте исходный файл doubleIt.c в текущей рабочей папке.
#include "doubleIt.h"
double doubleIt(double u)
{
return(u*2.0);
}
Создайте заголовочный файл doubleIt.h в текущей рабочей папке.
#ifndef MYFN #define MYFN double doubleIt(double u); #endif
Создайте новую модель Simulink. Сохраните его как myModel.
В Library Browser из User-Defined Functions добавьте в модель блок MATLAB Function и дважды кликните блок, чтобы открыть редактор.
Введите код, который вызывает doubleIt программа:
function y = callingDoubleIt(u) y = 0.0; y = coder.ceval('doubleIt',u);
Соедините блок Constant, имеющий значение 3.5 к входу порту блока MATLAB Function.
Подключите блок Отображения к порту выхода.

В диалоговом окне Model Configuration Parameters откройте панель Simulation Target.
В Insert custom C code in generated разделе выберите Header file из списка и введите #include "doubleIt.h" в Header file текстовом поле.
В Additional build information разделе выберите Source files из списка, введите doubleIt.c в Source files текстовом поле и нажмите OK.

Запустите симуляцию. Значение 7 появляется в блоке Display.
Эта процедура применяется только к симуляции.
Simulink генерирует код для блоков MATLAB Function и Stateflow® для симуляции модели. Когда вы вызываете внешний код С, используя блоки MATLAB Function или Stateflow, можно управлять определениями типов для импортированных шин и перечислениями в симуляции модели.
Simulink может сгенерировать определения типов, или можно предоставить заголовочный файл, содержащий определения типов. Управление этим поведением осуществляется с помощью флажка Generate typedefs for imported bus and enumeration types в диалоговом окне Model Configuration Parameters.
Чтобы включить пользовательский файл заголовка, определяющий типы перечисления и шины:
Снимите флажок Generate typedefs for imported bus and enumeration types.
Список файла заголовка на панели Simulation Target, в Header file текстовом поле.
Чтобы сконфигурировать Simulink, чтобы автоматически сгенерировать определения типов:
Установите флажок Generate typedefs for imported bus and enumeration types.
Не перечисляйте заголовочный файл, соответствующий шинам или перечислениям.
coder.BuildConfig | coder.ceval | coder.cinclude | coder.ExternalDependency | coder.ref | coder.rref | coder.target | coder.updateBuildInfo | coder.wref