Эта тема показывает различные сценарии внешней интеграции кода.
Этот пример показывает, как использовать 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. На Целевой панели Симуляции диалогового окна Configuration Parameters введите пользовательский исходный файл и заголовочный файл. Также войдите дополнительный, включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Целевую панель Симуляции.
%Open Configuration Parameters dialog box slCfgPrmDlg(model,'Open'); slCfgPrmDlg(bdroot,'TurnToPage','Simulation Target');
3. Если вы генерируете код с Simulink Coder® на Генерации кода диалогового окна Configuration Parameters> панель Пользовательского кода, введите тот же пользовательский исходный файл и заголовочный файл. Также войдите, дополнительное то же самое включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Генерацию кода> панель Пользовательского кода.
%Open Configuration Parameters dialog box slCfgPrmDlg(model,'Open'); slCfgPrmDlg(bdroot,'TurnToPage','Code Generation/Custom Code');
Сгенерируйте код
rtwbuild('rtwdemo_sfcustom')
### Starting build procedure for model: rtwdemo_sfcustom ### Successful completion of build procedure for model: rtwdemo_sfcustom
Вызовите код С из 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. Откройте диалоговое окно Model Configuration Parameters и перейдите к панели Пользовательского кода.
3. Исследуйте настройки на Исходный файл параметров и Инициализируйте функцию.
Исходный файл задает комментарий и устанавливает переменную GLOBAL_INT2
на-1.
Инициализируйте функцию, инициализирует переменную GLOBAL_INT2
к 1.
4. Закройте диалоговое окно.
5. Дважды кликните Образцовый Исходный блок. Поле Top of Model Source указывает, что генератор кода объявляет переменную GLOBAL_INT1
и установил ее на 0 наверху сгенерированного файла rtwdemo_slcustcode.c
.
6. Откройте инициированную подсистему Amplifier
. Подсистема включает блок System Outputs. Генератор кода помещает код, который вы задаете в том блоке в сгенерированном коде для самой близкой родительской атомарной подсистемы. В этом случае генератор кода помещает внешний код в сгенерированный код для подсистемы Amplifier
. Внешний код:
Объявляет переменную указателя *intPtr
и инициализирует его со значением переменной GLOBAL_INT1
.
Устанавливает переменную указателя на-1 во время выполнения.
Сбрасывает переменную указателя к 0 перед выходом.
7. Сгенерируйте код и отчет генерации кода.
8. Исследуйте код в сгенерированном исходном файле 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. Откройте диалоговое окно Model Configuration Parameters и перейдите к панели Пользовательского кода.
3. Исследуйте настройки на Исходный файл параметров и Инициализируйте функцию.
Исходный файл задает комментарий и устанавливает переменную GLOBAL_INT2
на-1.
Инициализируйте функцию, инициализирует переменную GLOBAL_INT2
к 1.
4. Закройте диалоговое окно.
5. Дважды кликните Образцовый Исходный блок. Поле Top of Model Source указывает, что генератор кода объявляет переменную GLOBAL_INT1
и установил ее на 0 наверху сгенерированного файла rtwdemo_slcustcode.c
.
6. Откройте инициированную подсистему Amplifier
. Подсистема включает блок System Outputs. Генератор кода помещает код, который вы задаете в том блоке в сгенерированном коде для самой близкой родительской атомарной подсистемы. В этом случае генератор кода помещает внешний код в сгенерированный код для подсистемы Amplifier
. Внешний код:
Объявляет переменную указателя *intPtr
и инициализирует его со значением переменной GLOBAL_INT1
.
Устанавливает переменную указателя на-1 во время выполнения.
Сбрасывает переменную указателя к 0 перед выходом.
7. Сгенерируйте код и отчет генерации кода.
8. Исследуйте код в сгенерированном исходном файле 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_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. На Целевой панели Симуляции диалогового окна Configuration Parameters введите пользовательский исходный файл и заголовочный файл. Также войдите дополнительный, включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Целевую панель Симуляции.
%Open Configuration Parameters dialog box slCfgPrmDlg(model,'Open'); slCfgPrmDlg(bdroot,'TurnToPage','Simulation Target');
3. Если вы генерируете код с Simulink Coder® на Генерации кода диалогового окна Configuration Parameters> панель Пользовательского кода, введите тот же пользовательский исходный файл и заголовочный файл. Также войдите, дополнительное то же самое включают директории и исходные файлы.
В этом примере, пользовательский заголовочный файл my_header.c
и исходный файл my_function.c
вводятся в Генерацию кода> панель Пользовательского кода.
%Open Configuration Parameters dialog box slCfgPrmDlg(model,'Open'); slCfgPrmDlg(bdroot,'TurnToPage','Code Generation/Custom Code');
Сгенерируйте код
rtwbuild('rtwdemo_sfcustom')
### Starting build procedure for model: rtwdemo_sfcustom ### Successful completion of build procedure for model: rtwdemo_sfcustom
Вызовите код С из Stateflow
Чтобы вызвать пользовательские функции кода С из Stateflow, используйте тот же синтаксис в качестве вызовов графической функции: result = my_custom_function(in_args);
Чтобы вызвать переменные типа структуры, используйте запись через точку: result = my_var.my_field;
Смотрите также
Закройте модель
rtwdemoclean;
close_system('rtwdemo_sfcustom',0);