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

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

Интегрируйте внешний код С++ в модель Используя S-функции

Этот пример показывает вам, как интегрировать Код С++ в модель при помощи 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 Код С++.

Похожие темы

Вставьте внешний 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. На Целевой панели Симуляции диалогового окна 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 для генерации кода

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