Можно вызвать внешний код С от модели Simulink® использование блока MATLAB function. Выполните эти высокоуровневые шаги:
Запустите с существующего кода С, состоящего из источника (.c
) и заголовок (.h
) файлы.
В блоке MATLAB function введите код MATLAB®, который вызывает код С. Используйте функцию coder.ceval
. Чтобы передать данные ссылкой, используйте coder.ref
, coder.rref
или coder.wref
.
Задайте исходные и заголовочные файлы C для моделирования в Целевой панели Моделирования диалогового окна Model Configuration Parameters. Включайте заголовочный файл с помощью двойных цитат, например, #include "program.h"
h. Если необходимо получить доступ к исходным и заголовочным файлам C вне рабочей папки, перечислите путь в Целевой панели Моделирования в текстовом поле Include Directories.
Также используйте coder.cinclude
и функции coder.updateBuildInfo
, чтобы задать исходные и заголовочные файлы в рамках вашего кода MATLAB. Чтобы разработать интерфейс к внешнему коду, можно использовать класс coder.ExternalDependency
. Чтобы видеть, какой рабочий процесс поддержан, см. пользовательский код Импорта.
Протестируйте свою модель Simulink и гарантируйте, что она функционирует правильно.
Если у вас есть лицензия Simulink Coder™, можно сгенерировать код для целей с помощью этого метода. Чтобы использовать те же исходные и заголовочные файлы для генерации кода, нажмите Use те же настройки пользовательского кода как Цель Моделирования в Генерации кода> панель Пользовательского кода. Можно также задать другой источник и заголовочные файлы.
К conditionalize ваш код, чтобы выполнить другие команды для моделирования и генерации кода, можно использовать функцию 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
.
В Браузере Библиотеки, от Пользовательских Функций, добавляет блок MATLAB function к модели и дважды кликает блок, чтобы открыть редактор.
Введите код, который вызывает программу doubleIt
:
function y = callingDoubleIt(u) y = 0.0; y = coder.ceval('doubleIt',u);
Соедините блок Constant, имеющий значение 3.5
к входному порту блока MATLAB function.
Соедините блок Display с выходным портом.
В диалоговом окне Model Configuration Parameters откройте Целевую панель Моделирования.
Во Вставке пользовательский код С в сгенерированном разделе выберите Заголовочный файл из списка и введите #include "doubleIt.h"
в текстовое поле Заголовочного файла.
В Дополнительном разделе информации о сборке выберите Исходные файлы из списка, введите doubleIt.c
в текстовое поле Исходных файлов и нажмите ОК.
Запустите моделирование. Значение 7
появляется в блоке Display.
Эта процедура применяется к моделированию только.
Simulink генерирует код для блоков MATLAB function и Stateflow®, чтобы моделировать модель. Когда вы вызываете внешнее использование кода С MATLAB Function blocks или Stateflow, можно управлять определениями типа для импортированных шин и перечислений в образцовом моделировании.
Simulink может сгенерировать определения типа, или можно предоставить заголовочный файл, содержащий определения типа. Вы управляете этим поведением с помощью Сгенерировать определений типов для импортированной шины и флажка перечисляемых типов в диалоговом окне Model Configuration Parameters.
Включать пользовательский заголовочный файл, задающий перечисление и типы шины:
Очистите Сгенерировать определения типов для импортированной шины и флажка перечисляемых типов.
Перечислите заголовочный файл в Целевой панели Моделирования в текстовом поле Заголовочного файла.
Сконфигурировать Simulink, чтобы автоматически сгенерировать определения типа:
Выберите определения типов Generate для импортированной шины и флажка перечисляемых типов.
Не перечисляйте заголовочный файл, который соответствует шинам или перечислениям.
coder.BuildConfig
| coder.ExternalDependency
| coder.ceval
| coder.cinclude
| coder.ref
| coder.rref
| coder.target
| coder.updateBuildInfo
| coder.wref