В этом разделе представлены различные сценарии интеграции внешнего кода.
В этом примере показано, как интегрировать код C++ в модель с помощью S-функций.
Открыть пример модели
Открыть пример модели rtwdemo_cpp.
open_system('rtwdemo_cpp');

Настройка компилятора C++
1. В окне команд MATLAB введите следующую команду:
mex -setup
2. В ответ на запрос выберите компилятор C++, установленный на компьютере разработчика.
Интеграция кода C++
Код C++ можно интегрировать в модель с помощью S-функций.
1. Подготовьте источник S-функций.
2. Откройте приложение Simulink Coder или Embedded Coder.
3. Настройка исходных файлов и папок S-функции. Откройте диалоговое окно Параметр конфигурации модели (Model Configuration Parameter), перейдите на панель Создание кода (Code Generation) > Пользовательский код (Custom Code) и добавьте исходные файлы S-функций и include папки.
4. Встроите S-функцию, чтобы исключить служебные данные S-функций в сгенерированном коде.
Открытые sfun_cppcount_cpp.tlc
Настройка модели для генерации кода C++
Задайте для параметра конфигурации модели Язык значение C++.
Создание и просмотр кода.
Создайте и просмотрите код C++.
Связанные темы
В этом примере показано, как использовать Stateflow ® для интеграции внешнего кода в модель.
Открыть модель
model='rtwdemo_sfcustom';
open_system(model);

Интегрировать код
1. Пример включает пользовательский файл заголовка my_header.c и пользовательский исходный файл my_function.c.
%Open files my_header.h and my_function.c eval('edit my_header.h') eval('edit my_function.c')
2. В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) на панели Цель моделирования (Simulation Target) введите пользовательский исходный файл и файл заголовка. Также введите дополнительные каталоги и исходные файлы.
В этом примере настраиваемый файл заголовка my_header.c и исходный файл my_function.c вводятся на панели цели моделирования.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
3. Чтобы создать код, в диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) «Создание кода» (Code Generation) > панель «Пользовательский код» (Custom Code) введите один и тот же пользовательский исходный файл и файл заголовка. Также введите те же дополнительные каталоги и исходные файлы.
В этом примере настраиваемый файл заголовка my_header.c и исходный файл my_function.c вводятся на панели «Создание кода» > «Пользовательский код».
Откройте панель Создание кода (Code Generation) > Пользовательский код (Custom Code) диалогового окна Параметры конфигурации модели (Model Configuration Parameters).
configSet = getActiveConfigSet(model); openDialog(configSet);
Создать код
slbuild('rtwdemo_sfcustom')
### Starting build procedure for: rtwdemo_sfcustom ### Successful completion of build procedure for: rtwdemo_sfcustom Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================= rtwdemo_sfcustom Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 6.8965s
Код вызова C из Stateflow
Чтобы вызвать пользовательские функции кода C из Stateflow, используйте тот же синтаксис, что и вызовы графических функций: result = my_custom_function(in_args);
Для вызова переменных структурного типа используйте точечную нотацию: result = my_var.my_field;
См. также
Закрыть модель
rtwdemoclean;
close_system('rtwdemo_sfcustom',0);
В этом примере показано, как поместить внешний код в созданный код с помощью пользовательских блоков кода и параметров конфигурации модели.
1. Открытие модели rtwdemo_slcustcode.
open_system('rtwdemo_slcustcode')

2. Откройте приложение Simulink Coder или Embedded Coder.
3. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на панель Пользовательский код (Custom Code).
4. Проверьте настройки параметров конфигурации модели Source file и Initialize function.
Исходный файл указывает комментарий и задает переменную GLOBAL_INT2 до -1.
Функция инициализации инициализирует переменную GLOBAL_INT2 на 1.
5. Закройте диалоговое окно.
6. Дважды щелкните блок «Источник модели». Параметр блока «Верх источника модели» указывает, что генератор кода объявляет переменную GLOBAL_INT1 и установите значение 0 в верхней части созданного файла rtwdemo_slcustcode.c.
7. Откройте запускаемую подсистему Amplifier. Подсистема включает в себя блок системных выходов. Генератор кода помещает код, указанный в этом блоке, в созданный код для ближайшей родительской атомной подсистемы. В этом случае генератор кода помещает внешний код в созданный код для Amplifier подсистема. Внешний код:
Объявляет переменную указателя *intPtr и инициализирует его значением переменной GLOBAL_INT1.
Задает переменной указателя значение -1 во время выполнения.
Сбрасывает переменную указателя на 0 перед выходом.
8. Создание кода и отчета о создании кода.
9. Проверьте код в созданном исходном файле rtwdemo_slcustcode.c. В верхней части файла, после #include , вы находите следующий код объявления. В примере указывается первое объявление с параметром конфигурации Source file и второе объявление с блоком Model Source.
int_T GLOBAL_INT2 = -1;
int_T GLOBAL_INT1 = 0;
Функция вывода для Amplifier подсистема включает в себя следующий код, который показывает внешний код, интегрированный с сгенерированным кодом, который применяет усиление. Пример задает три строки кода для переменной указателя с блоком «Системные выходы» в Amplifier подсистема.
int_T *intPtr = &GLOBAL_INT1;
*intPtr = -1;
rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;
*intPtr = 0;
Следующее назначение появляется в функции начальной точки инициализации модели. В примере это назначение указывается с помощью параметра конфигурации Initialize function.
GLOBAL_INT2 = 1;
В этом примере показано, как поместить внешний код в созданный код с помощью пользовательских блоков кода и параметров конфигурации модели.
1. Открытие модели rtwdemo_slcustcode.
open_system('rtwdemo_slcustcode')

2. Откройте приложение Simulink Coder или Embedded Coder.
3. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на панель Пользовательский код (Custom Code).
4. Проверьте настройки параметров конфигурации модели Source file и Initialize function.
Исходный файл указывает комментарий и задает переменную GLOBAL_INT2 до -1.
Функция инициализации инициализирует переменную GLOBAL_INT2 на 1.
5. Закройте диалоговое окно.
6. Дважды щелкните блок «Источник модели». Параметр блока «Верх источника модели» указывает, что генератор кода объявляет переменную GLOBAL_INT1 и установите значение 0 в верхней части созданного файла rtwdemo_slcustcode.c.
7. Откройте запускаемую подсистему Amplifier. Подсистема включает в себя блок системных выходов. Генератор кода помещает код, указанный в этом блоке, в созданный код для ближайшей родительской атомной подсистемы. В этом случае генератор кода помещает внешний код в созданный код для Amplifier подсистема. Внешний код:
Объявляет переменную указателя *intPtr и инициализирует его значением переменной GLOBAL_INT1.
Задает переменной указателя значение -1 во время выполнения.
Сбрасывает переменную указателя на 0 перед выходом.
8. Создание кода и отчета о создании кода.
9. Проверьте код в созданном исходном файле rtwdemo_slcustcode.c. В верхней части файла, после #include , вы находите следующий код объявления. В примере указывается первое объявление с параметром конфигурации Source file и второе объявление с блоком Model Source.
int_T GLOBAL_INT2 = -1;
int_T GLOBAL_INT1 = 0;
Функция вывода для Amplifier подсистема включает в себя следующий код, который показывает внешний код, интегрированный с сгенерированным кодом, который применяет усиление. Пример задает три строки кода для переменной указателя с блоком «Системные выходы» в Amplifier подсистема.
int_T *intPtr = &GLOBAL_INT1;
*intPtr = -1;
rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;
*intPtr = 0;
Следующее назначение появляется в функции начальной точки инициализации модели. В примере это назначение указывается с помощью параметра конфигурации Initialize function.
GLOBAL_INT2 = 1;
В этом примере показано, как использовать Stateflow ® для интеграции внешнего кода C++ в модель.
Открыть модель
model='rtwdemo_sfcpp';
open_system(model);

Для настройки компилятора C++ в командной строке введите mex -setup.
Интеграция кода C++
1. Создайте функции-оболочки в стиле C или получите доступ к макросам для каждого метода, вызываемого с языка действий C.
%Open example wrapper functions. filename=fullfile(matlabroot, 'toolbox', 'rtw', 'rtwdemos', 'custom_cpp_src', 'adder_cpp.cpp'); eval('edit(filename)'); clear filename; filename=fullfile(matlabroot, 'toolbox', 'rtw', 'rtwdemos', 'custom_cpp_src', 'adder_cpp.h'); eval('edit(filename)'); clear filename;
2. В диалоговом окне «Параметры конфигурации» «Создание кода» > «Пользовательский код» введите исходные файлы S-функции и включите каталоги.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
3. В диалоговом окне «Параметры конфигурации» «Цель моделирования» > «Пользовательский код» введите исходные файлы S-функции и включите каталоги.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
Создать код C++
В диалоговом окне «Параметры конфигурации» на панели «Создание кода» установите для параметра «Язык» значение C++. Для создания кода выберите «Построить».
%Open Configuration Parameters dialog box configSet = getActiveConfigSet(model); openDialog(configSet); clear model;
См. также
Закрыть модель
rtwdemoclean;
close_system('rtwdemo_sfcpp',0);