Вы можете вызвать внешний код С из 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