Эта тема показывает различные сценарии внешней интеграции кода.
Этот пример показывает вам, как интегрировать Код С++ в модель при помощи S-функций.
Открытая модель в качестве примера
Откройте модель rtwdemo_cpp
в качестве примера.
open_system('rtwdemo_cpp');
Сконфигурируйте компилятор C++
1. В командном окне MATLAB введите эту команду:
mex -setup
2. Когда запрошено, выберите компилятор C ++, который установлен на вашем компьютере разработчика.
Интегрируйте код С++
Можно интегрировать Код С++ в модель при помощи S-функций.
1. Подготовьте источник S-функции.
2. Откройте приложение Embedded Coder или Simulink Coder.
3. Сконфигурируйте исходные файлы S-функции и папки. Откройте диалоговое окно Model Configuration Parameter, перейдите Генерации кода> панель Пользовательского кода и добавьте исходные файлы S-функции и include
папки.
4. Встройте S-функцию, чтобы устранить наверху S-функций в сгенерированном коде.
Открытый sfun_cppcount_cpp.tlc
Сконфигурируйте модель для генерации кода С++
Установите Язык параметра конфигурации модели на C++
.
Сгенерируйте и рассмотрите код.
Сгенерируйте и reviw Код С++.
Похожие темы
В этом примере показано, как использовать 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 введите пользовательский исходный файл и заголовочный файл. Также войдите дополнительный, включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Целевую панель Симуляции.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
3. Чтобы сгенерировать код, на Генерации кода диалогового окна Model Configuration Parameters> панель Пользовательского кода, вводят тот же пользовательский исходный файл и заголовочный файл. Также войдите, дополнительное то же самое включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Генерацию кода> панель Пользовательского кода.
Откройте Генерацию кода> панель Пользовательского кода диалогового окна Model Configuration Parameters.
configSet = getActiveConfigSet(model); openDialog(configSet);
Сгенерируйте код
rtwbuild('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.8033s
Вызовите код С из Stateflow
Чтобы вызвать пользовательские функции кода С из 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. Откройте приложение Embedded Coder или Simulink Coder.
3. Откройте диалоговое окно Model Configuration Parameters и перейдите к панели Пользовательского кода.
4. Исследуйте настройки на Исходный файл параметров конфигурации модели и Инициализируйте функцию.
Исходный файл задает комментарий и устанавливает переменную GLOBAL_INT2
к-1.
Инициализируйте функцию, инициализирует переменную GLOBAL_INT2
к 1.
5. Закройте диалоговое окно.
6. Дважды кликните Исходный блок Модели. Верхняя часть параметров блоков Источника Модели указывает, что генератор кода объявляет переменную GLOBAL_INT1
и набор это к 0 наверху сгенерированного файла rtwdemo_slcustcode.c
.
7. Откройте триггируемую подсистему Amplifier
. Подсистема включает блок System Outputs. Генератор кода помещает код, который вы задаете в том блоке в сгенерированном коде для самой близкой родительской атомарной подсистемы. В этом случае генератор кода помещает внешний код в сгенерированный код для Amplifier
подсистема. Внешний код:
Объявляет переменную указателя *intPtr
и инициализирует его значением переменной GLOBAL_INT1
.
Устанавливает переменную указателя на-1 во время выполнения.
Сбрасывает переменную указателя к 0 перед выходом.
8. Сгенерируйте код и отчет генерации кода.
9. Исследуйте код в сгенерированном исходном файле rtwdemo_slcustcode.c
. Наверху файла, после #include
операторы, вы находите следующий код объявления. Пример задает первое объявление с параметром конфигурации Исходного файла и второе объявление с Исходным блоком Модели.
int_T GLOBAL_INT2 = -1;
int_T GLOBAL_INT1 = 0;
Выходная функция для Amplifier
подсистема включает следующий код, который показывает внешний код, интегрированный со сгенерированным кодом, который применяет усиление. Пример задает эти три строки кода для переменной указателя с блоком System Outputs в Amplifier
подсистема.
int_T *intPtr = &GLOBAL_INT1;
*intPtr = -1;
rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;
*intPtr = 0;
Следующее присвоение появляется в модели, инициализируют функцию точки входа. Пример задает это присвоение с Инициализировать функциональным параметром конфигурации.
GLOBAL_INT2 = 1;
В этом примере показано, как поместить, внешний код в сгенерированном коде при помощи пользовательского кода блокируется и параметры конфигурации модели.
1. Откройте модель rtwdemo_slcustcode
.
open_system('rtwdemo_slcustcode')
2. Откройте приложение Embedded Coder или Simulink Coder.
3. Откройте диалоговое окно Model Configuration Parameters и перейдите к панели Пользовательского кода.
4. Исследуйте настройки на Исходный файл параметров конфигурации модели и Инициализируйте функцию.
Исходный файл задает комментарий и устанавливает переменную GLOBAL_INT2
к-1.
Инициализируйте функцию, инициализирует переменную GLOBAL_INT2
к 1.
5. Закройте диалоговое окно.
6. Дважды кликните Исходный блок Модели. Верхняя часть параметров блоков Источника Модели указывает, что генератор кода объявляет переменную GLOBAL_INT1
и набор это к 0 наверху сгенерированного файла rtwdemo_slcustcode.c
.
7. Откройте триггируемую подсистему Amplifier
. Подсистема включает блок System Outputs. Генератор кода помещает код, который вы задаете в том блоке в сгенерированном коде для самой близкой родительской атомарной подсистемы. В этом случае генератор кода помещает внешний код в сгенерированный код для Amplifier
подсистема. Внешний код:
Объявляет переменную указателя *intPtr
и инициализирует его значением переменной GLOBAL_INT1
.
Устанавливает переменную указателя на-1 во время выполнения.
Сбрасывает переменную указателя к 0 перед выходом.
8. Сгенерируйте код и отчет генерации кода.
9. Исследуйте код в сгенерированном исходном файле rtwdemo_slcustcode.c
. Наверху файла, после #include
операторы, вы находите следующий код объявления. Пример задает первое объявление с параметром конфигурации Исходного файла и второе объявление с Исходным блоком Модели.
int_T GLOBAL_INT2 = -1;
int_T GLOBAL_INT1 = 0;
Выходная функция для Amplifier
подсистема включает следующий код, который показывает внешний код, интегрированный со сгенерированным кодом, который применяет усиление. Пример задает эти три строки кода для переменной указателя с блоком System Outputs в Amplifier
подсистема.
int_T *intPtr = &GLOBAL_INT1;
*intPtr = -1;
rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;
*intPtr = 0;
Следующее присвоение появляется в модели, инициализируют функцию точки входа. Пример задает это присвоение с Инициализировать функциональным параметром конфигурации.
GLOBAL_INT2 = 1;
В этом примере показано, как использовать Stateflow®, чтобы интегрировать внешний Код С++ в модель.
Открытая модель
model='rtwdemo_sfcpp';
open_system(model);
Чтобы установить компилятор C++, на командной строке, вводят mex -setup
.
Интегрируйте код С++
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. На Генерации кода диалогового окна Configuration Parameters> панель Пользовательского кода, введите исходные файлы S-функции и включайте директории.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
3. На Цели Симуляции диалогового окна Configuration Parameters> панель Пользовательского кода, введите исходные файлы S-функции и включайте директории.
%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
Сгенерируйте код С++
На панели Генерации кода диалогового окна Configuration Parameters, Языке набора к C++
. Чтобы сгенерировать код, выберите Build.
%Open Configuration Parameters dialog box configSet = getActiveConfigSet(model); openDialog(configSet); clear model;
Смотрите также
Закройте модель
rtwdemoclean;
close_system('rtwdemo_sfcpp',0);