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

Настройте имя функции и аргументы.
Измените имена идентификаторов функций и аргументов. Параметр конфигурации модели Аргументы метода Subsystem определяет правило именования по умолчанию для аргументов Simulink Function. Изменения, внесенные в диалоговом окне «Функциональный интерфейс C/C + +», переопределяют правило именования по умолчанию.
В поле имени функции C/C + + и в столбце «Имя идентификатора C/C + +» для каждого аргумента функции Simulink введите пользовательское имя или правило именования. Укажите допустимые символы C-идентификатора, макросы формата идентификатора или комбинацию символов и макросов. В этом примере назовите функциюfunction3 и для аргументов введите правило именования $N$M.
Чтобы просмотреть советы о доступных макросах, наведите курсор на имя функции C/C + + и имя идентификатора C/C + +. Дополнительные сведения о правилах именования идентификаторов см. в разделе Управление форматом идентификаторов.
Для аргумента u, установите квалификатор типа C/C + + в значениеPointer to const.
Измените порядок аргументов. Перетащите элемент y аргумент над строкой u строка аргумента.

Проверьте изменения, проверив предварительный просмотр прототипа функции.
Нажмите кнопку «Применить». Изменения, внесенные в функциональный блок Simulink или блок вызывающего абонента функции, влияют на генерацию кода для функционального блока Simulink и соответствующих блоков вызывающего абонента функции в модели.
При необходимости можно изменить возвращаемый аргумент C/C + + сvoid кому y. В этом случае прототипом функции C является y = function3(const * u).
Сохраните изменения, нажав кнопку ОК.
Сохраните модель.
Убедитесь, что блок Simulink Function не выбран. Затем создайте код для модели.
В представлении «Код» откройте созданный файл. rtwdemo_functions.c и поиск function3. Созданный код функции отражает изменения в созданном прототипе функции 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, создаваемый генератором кода для экспортируемого блока функции Simulink.
Для экспортированной функции с областью действия можно изменить сгенерированный возвращаемый аргумент, квалификаторы типа аргумента и порядок аргументов. Нельзя изменить имя созданной функции и имена аргументов.
Открытие модели rtwdemo_functions. Сохраните его в доступном для записи месте.
Изменение видимости глобальной функции f3 от глобального к масштабному. Открытие функционального блока Simulink f3. В функциональном блоке дважды щелкните по блоку Trigger Port. f3. В диалоговом окне параметров блока задайте для параметра «Видимость функции» значение scoped. Нажмите «Применить» и «ОК».
В коллекции приложений откройте приложение Embedded Coder.
На вкладке «Код C» перейдите на вкладку «Сопоставления кода - C».
В редакторе сопоставлений кодов перейдите на вкладку Функции.
В строке для функции f3щелкните гиперссылку предварительного просмотра функции. Диалоговое окно C/C + + Function Interface отображает прототип функции Simulink какy = f3(u) и прототип функции C/C + + в качествеy = rtwdemo_functions_f3(rtu_u). Предварительный просмотр прототипа функции C/C + + обновляется при внесении изменений.

Для моделей, настроенных для многоинститутного кода C, предварительный просмотр интерфейса для функций Simulink в области включает self аргумент. self аргумент - указатель на версию модели в реальном времени (RT_MODEL) структура данных, которая хранит многоэкземплярные данные, связанные с многократно используемыми функциями.
Если параметр конфигурации модели Code interface packaging имеет значение Reusable function и Общее число экземпляров, разрешенных для модели верхнего уровня, установлено в Multiple, аргумент отображается как self, указывая, что генератор кода создает собственную структуру.
Если параметр конфигурации модели Code interface packaging имеет значение Reusable function или Общее число экземпляров, разрешенных для модели верхнего уровня, равно Multiple, аргумент отображается как [self], указывая, что аргумент является необязательным. Генератор кода создает self структура, только если модель используется в качестве модели верхнего уровня, а для упаковки интерфейса кода установлено значение Reusable function или если модель используется в качестве ссылочной модели, а для параметра Общее число экземпляров, разрешенных для модели верхнего уровня, задано значение Multiple.
Дополнительные сведения о настройке модели для генерации кода с возможностью создания нескольких экземпляров см. в разделе Создание кода повторного ввода из функциональных блоков Simulink.
Настройте аргументы. В этом примере настройте u аргумент. Установите для квалификатора типа C/C + + значениеPointer to const.
Проверьте изменения, проверив предварительный просмотр прототипа функции.
Нажмите кнопку «Применить». Изменения, внесенные в функциональный блок Simulink или блок вызывающего абонента функции, влияют на генерацию кода для функционального блока Simulink и соответствующих блоков вызывающего абонента функции в модели.
При необходимости можно изменить возвращаемый аргумент C/C + + сy кому void. В этом случае прототипом функции C является void = rtwdemo_functions_f3(* rty_y, const * rtu_u).
Сохраните изменения, нажав кнопку ОК.
Сохраните модель.
Убедитесь, что блок Simulink Function не выбран. Затем создайте код для модели.
В представлении «Код» откройте созданный файл. rtwdemo_functions.c и поиск rtwdemo_functions_f3. Созданный код функции отражает изменения в созданном прототипе функции 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;
}В этом примере показано, как настроить интерфейс функции C++, создаваемый генератором кода для экспортируемого блока функции Simulink.
Для экспортированной функции с областью действия можно изменить сгенерированный возвращаемый аргумент, квалификаторы типа аргумента и порядок аргументов. Нельзя изменить имя созданной функции и имена аргументов.
Открытие модели rtwdemo_functions. Сохраните его в рабочей области, доступной для записи.
Изменение видимости глобальной функции f3 от глобального к масштабному. Открытие функционального блока Simulink f3. В функциональном блоке дважды щелкните по блоку Trigger Port. f3. В диалоговом окне параметров блока задайте для параметра «Видимость функции» значение scoped. Нажмите «Применить» и «ОК».
В коллекции приложений откройте приложение Embedded Coder.
Установите для параметра конфигурации модели Language значение C++.
Откройте диалоговое окно «Настройка функционального интерфейса C/C + +». Щелкните правой кнопкой мыши блок функции Simulinkf3. В контекстном меню выберите C/C + + Code > Configure C/C + + Function Interface. В диалоговом окне в качестве прототипа функции Simulink отображаетсяy = f3(u) и прототип функции C/C + + в качествеy = rtwdemo_functions_f3(rtu_u). Предварительный просмотр прототипа функции C/C + + обновляется при внесении изменений.

Настройте аргументы. В этом примере настройте u аргумент. Установите для квалификатора типа C/C + + значениеPointer to const.
Нажмите кнопку «Применить». Изменения, внесенные в функциональный блок Simulink или блок вызывающего абонента функции, влияют на генерацию кода для функционального блока Simulink и соответствующих блоков вызывающего абонента функции в модели.
При необходимости можно изменить возвращаемый аргумент C/C + + сy кому void. В этом случае прототипом функции C++ является void = rtwdemo_functions_f3(* rty_y, const * rtu_u).
Сохраните изменения, нажав кнопку ОК.
Сохраните модель.
Убедитесь, что блок Simulink Function не выбран. Затем создайте код для модели.
В представлении «Код» откройте созданный файл. rtwdemo_functions.cpp и поиск функции f3. Созданный код функции отражает изменения в созданном прототипе функции C++.
real_T rtwdemo_functionsModelClass::f3(const real_T *rtu_u)
{
real_T rty_y_0;
rtY.TicToc10 = rtDWork.Delay_DSTATE;
rtDWork.Delay_DSTATE = static_cast<int8_T>(static_cast<int32_T>
(-static_cast<int32_T>(rtY.TicToc10)));
adder(rtB.Subtract, rtU.U2, *rtu_u, &rtB.FunctionCaller);
rty_y_0 = rtB.FunctionCaller;
return rty_y_0;
}
Для генерации кода C++ глобальные функции Simulink несовместимы с интерфейсами класса C++ для функций начального уровня модели.
Конфигурация интерфейса кода функции Simulink не поддерживает функции Simulink и вызывающих абонентов функции в Stateflow ®.