С Embedded Coder® можно настроить сгенерированные интерфейсы функции C/C++ для Simulink Функциональные и Функциональные блоки Вызывающей стороны. Функциональная настройка интерфейса кода поддерживает более легкое интегрирование сгенерированного кода с функциями или вызовами функции во внешнем коде и индивидуальными настройками для кодирования стандартов или конструктивных требований.
Можно настроить сгенерированные интерфейсы функции C/C++ для:
Функции Global Simulink®
Экспортируемый определил объем функций Simulink
Вы не можете настроить сгенерированный интерфейс функции C/C++ для ограниченного по объему Функционального блока Simulink, который не расположен на корневом уровне модели. Для получения дополнительной информации смотрите Ограниченный по объему и Глобальная переменная Обзор Функциональных блоков Simulink (Simulink).
Путем открытия диалогового окна от выбранного блока Simulink Function или Function Caller можно настроить прототипа функции C/C++, сгенерированного для того блока. Ваши изменения для выбранного блока также обновляют другой соответствующий Simulink Функциональные и Функциональные блоки Вызывающей стороны в модели. Функциональная видимость, глобальная переменная или ограниченный по объему, установленный в функциональной Триггерной Блокировке порта, определяет, какие функциональные атрибуты можно изменить:
Для глобальной функции можно поменять имя функции и имена, ввести спецификаторы и порядок аргументов функции.
Для экспортируемой ограниченной по объему функции можно изменить спецификаторы типа аргумента и порядок аргументов. Вы не можете изменить функцию и имена аргумента.
Ваши изменения графически не изменяют модель и не влияют на прототипа функции Simulink, заданного в блоке.
Embedded Coder поддерживает настройку интерфейса функции Simulink кода для ERT и ERT-выведенных целей, за исключением цели AUTOSAR.
Этот пример показывает, как настроить сгенерированный интерфейс функции C для Функционального блока Simulink для автоматической генерации кода C.
Откройте и сохраните модель rtwdemo_functions в качестве примера.
Настройте функциональный интерфейс для Функционального блока Simulink путем открытия диалогового окна настройки с помощью одного из этих методов:
Щелкните правой кнопкой по Simulink Function block f3. В контекстном меню выберите C/C++ Code> Configure C/C++ Function Interface.
Откройте перспективу Кода, перейдите к редактору Отображений Кода и выберите вкладку Entry-Point Functions. В Функции Simulink f3 строка, в соответствии со столбцом Function Preview, нажимают на прототипную гиперссылку.
Диалоговое окно настройки открывается, чтобы отобразить прототипа функции Simulink, заданного в блоке, y = f3(u) и предварительном просмотре интерфейса функции C/C++, void f3(rtu_u, * rty_y). Предварительный просмотр интерфейса C/C++ обновляет динамически, когда вы вносите изменения.

Для моделей, что вы конфигурируете для C multi-instantiable код, интерфейсный предварительный просмотр включает аргумент self. Аргумент self является указателем на версию модели реального времени (RT_MODEL) структура данных, которая хранит данные мультиэкземпляра, сопоставленные с допускающими повторное использование функциями.
Если образцовый параметр конфигурации, Code interface packaging установлен в Reusable function и Total number of instances allowed per top model, установлен в Multiple, аргумент появляется как self, указывая, что генератор кода производит сам структура.
Если образцовый параметр конфигурации, Code interface packaging установлен в Reusable function или Total number of instances allowed per top model, установлен в Multiple, аргумент появляется как [self], указывая, что аргумент является дополнительным. Генератор кода производит структуру self, только если вы используете модель в качестве топ-модели, и Code interface packaging установлен в Reusable function или если вы используете модель в качестве модели, на которую ссылаются, и Total number of instances allowed per top model установлен в Multiple.
Для получения дополнительной информации о конфигурировании модели для multi-instantiable генерации кода, смотрите, Генерируют Повторно используемый Код от Функциональных блоков Simulink.
Исследуйте настройки диалогового окна на C/C++ Function Name и C/C++ Identifier Name — $N и rt$I$N$M.
Образцовый параметр конфигурации Subsystem method arguments задает формат идентификатора по умолчанию (называющий правило) для Аргументов функции Simulink.
![]()
rt является текстовым префиксом. $I, $N и $M являются макросами формата идентификатора. Для получения дополнительной информации смотрите аргументы метода Подсистемы (Simulink Coder).
Измените функцию и имена идентификатора аргумента. Изменения, что вы делаете в переопределении диалогового окна образцовые значения по умолчанию параметра конфигурации.
В поле C/C++ function name, и в столбце C/C++ Identifier Name для каждого аргумента функции Simulink, вводят пользовательское имя или правило именования идентификатора. Задайте допустимые символы C-идентификатора, макросы формата идентификатора или комбинацию. В данном примере назовите функциональный function3 и, для обоих аргументов, введите идентификатор, называющий правило $N$M.
Чтобы видеть советы о доступных макросах, установите свой курсор на C/C++ function name и C/C++ Identifier Name. Для получения дополнительной информации о правилах именования идентификатора, смотрите Управление форматом Идентификатора.
Для аргумента u, набор C/C++ Type Qualifier к Pointer to const.
Переупорядочьте аргументы. Перетащите строку аргумента y выше строки аргумента u и отбрасывание.
Нажмите Apply и исследуйте обновленного прототипа функции C/C++: void function3(* y, const * u).
Ваши модификации, сделанный ли к Функциональному блоку Simulink или блоку Function Caller, влияют на генерацию кода для Функционального блока Simulink и соответствующих Функциональных блоков Вызывающей стороны в модели.

Опционально, вы могли изменить C/C++ return argument от void до y. Получившейся функцией C/C++ является y = function3(const * u).
Нажмите OK, чтобы сохранить ваши изменения.
Сгенерируйте код.
Откройте сгенерированный файл rtwdemo_functions.c и ищите function3. Сгенерированный функциональный код отражает изменения в сгенерированном прототипе функции C/C++.
void function3(real_T *y, const real_T *u)
{
rtY.TicToc10 = rtDWork.Delay_DSTATE;
rtDWork.Delay_DSTATE = (int8_T)(int32_T)-(int32_T)rtY.TicToc10;
adder(rtB.Subtract, rtU.U2, *u, &rtB.FunctionCaller);
*y = rtB.FunctionCaller;
}Этот пример показывает вам, как изменить сгенерированный интерфейс функции C/C++ для экспортируемого ограниченного по объему Функционального блока Simulink и сгенерировать код С с заданными изменениями.
Для экспортируемой ограниченной по объему функции можно изменить сгенерированный возвращаемый аргумент, спецификаторы типа аргумента и порядок аргументов. Вы не можете поменять сгенерированное имя функции и имена аргумента.
Откройте модель rtwdemo_functions. Сохраните его в перезаписываемую рабочую область.
Измените видимость глобального функционального f3 от глобальной переменной до ограниченного по объему. Откройте Функциональный блок Simulink f3. В функциональном блоке дважды кликните Триггерную Блокировку порта f3. В диалоговом окне параметров блоков, набор Function visibility к scoped. Нажмите Apply и OK.
Настройте функциональный интерфейс путем открытия диалогового окна настройки с помощью одного из этих методов:
Щелкните правой кнопкой по Simulink Function block f3. В контекстном меню выберите C/C++ Code> Configure C/C++ Function Interface.
Откройте перспективу Кода, перейдите к редактору Отображений Кода и выберите вкладку Entry-Point Functions. В Функции Simulink f3 строка, в соответствии со столбцом Function Preview, нажимают на прототипную гиперссылку.
Сконфигурировать диалоговое окно Function Interface C/C++ открывается, чтобы отобразить интерфейс функции Simulink, заданный в блоке, y = f3(u), и начальном интерфейсе функции C/C++ по умолчанию, y rtwdemo_functions_f3(rtu_u).

Для аргумента u, набор C/C++ Type Qualifier к Pointer to const.
Нажмите Apply и исследуйте обновленный интерфейс функции C/C++: y rtwdemo_functions_f3(const * rtu_u).
Ваши модификации, сделанный ли к Функциональному блоку Simulink или блоку Function Caller, влияют на генерацию кода для Функционального блока Simulink и соответствующих Функциональных блоков Вызывающей стороны в модели.
Опционально, можно изменить C/C++ return argument от y до void. В этом случае функциональным интерфейсом является void = rtwdemo_functions_f3(* rty_y, const * rtu_u).
Нажмите OK, чтобы сохранить ваши изменения.
Сгенерируйте код.
Откройте сгенерированный файл rtwdemo_functions.c и ищите _f3. Сгенерированный функциональный код отражает изменения в сгенерированном прототипе функции C/C++.
real_T rtwdemo_functions_f3(const real_T *rtu_u)
{
real_T rty_y_0;
rtY.TicToc10 = rtDWork.Delay_DSTATE;
rtDWork.Delay_DSTATE = (int8_T)(int32_T)-(int32_T)rtY.TicToc10;
adder(rtB.Subtract, rtU.U2, *rtu_u, &rtB.FunctionCaller);
rty_y_0 = rtB.FunctionCaller;
return rty_y_0;
}
Для генерации Кода С++ глобальные функции Simulink несовместимы с интерфейсами класса C++ для образцовых функций точки входа.
Настройка интерфейса функции Simulink кода не поддерживает функции Simulink и функционирует вызывающие стороны в Stateflow®.
Функциональная вызывающая сторона | Функция Simulink