Внешние примеры интеграции кода

Эта тема показывает различные сценарии внешней интеграции кода.

Вставьте внешний C и код С++ в диаграммы Stateflow для генерации кода

Этот пример показывает, как использовать 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;

Вставьте внешний C и код С++ в диаграммы Stateflow для генерации кода

Этот пример показывает, как использовать 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);