Настройте интерфейсы функции точки входа для Simulink функциональные и функциональные блоки вызывающей стороны

С 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/C++ для Глобальной переменной Функциональный блок Simulink

Этот пример показывает, как настроить сгенерированный интерфейс функции C для Функционального блока Simulink для автоматической генерации кода C.

  1. Откройте и сохраните модель rtwdemo_functions в качестве примера.

  2. Настройте функциональный интерфейс для Функционального блока 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.

  3. Исследуйте настройки диалогового окна на C/C++ Function Name и C/C++ Identifier Name$N и rt$I$N$M.

    Образцовый параметр конфигурации Subsystem method arguments задает формат идентификатора по умолчанию (называющий правило) для Аргументов функции Simulink.

    rt является текстовым префиксом. $I, $N и $M являются макросами формата идентификатора. Для получения дополнительной информации смотрите аргументы метода Подсистемы (Simulink Coder).

  4. Измените функцию и имена идентификатора аргумента. Изменения, что вы делаете в переопределении диалогового окна образцовые значения по умолчанию параметра конфигурации.

    В поле C/C++ function name, и в столбце C/C++ Identifier Name для каждого аргумента функции Simulink, вводят пользовательское имя или правило именования идентификатора. Задайте допустимые символы C-идентификатора, макросы формата идентификатора или комбинацию. В данном примере назовите функциональный function3 и, для обоих аргументов, введите идентификатор, называющий правило $N$M.

    Чтобы видеть советы о доступных макросах, установите свой курсор на C/C++ function name и C/C++ Identifier Name. Для получения дополнительной информации о правилах именования идентификатора, смотрите Управление форматом Идентификатора.

  5. Для аргумента u, набор C/C++ Type Qualifier к Pointer to const.

  6. Переупорядочьте аргументы. Перетащите строку аргумента y выше строки аргумента u и отбрасывание.

  7. Нажмите Apply и исследуйте обновленного прототипа функции C/C++: void function3(* y, const * u).

    Ваши модификации, сделанный ли к Функциональному блоку Simulink или блоку Function Caller, влияют на генерацию кода для Функционального блока Simulink и соответствующих Функциональных блоков Вызывающей стороны в модели.

    Опционально, вы могли изменить C/C++ return argument от void до y. Получившейся функцией C/C++ является y = function3(const * u).

  8. Нажмите OK, чтобы сохранить ваши изменения.

  9. Сгенерируйте код.

  10. Откройте сгенерированный файл 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

Этот пример показывает вам, как изменить сгенерированный интерфейс функции C/C++ для экспортируемого ограниченного по объему Функционального блока Simulink и сгенерировать код С с заданными изменениями.

Для экспортируемой ограниченной по объему функции можно изменить сгенерированный возвращаемый аргумент, спецификаторы типа аргумента и порядок аргументов. Вы не можете поменять сгенерированное имя функции и имена аргумента.

  1. Откройте модель rtwdemo_functions. Сохраните его в перезаписываемую рабочую область.

  2. Измените видимость глобального функционального f3 от глобальной переменной до ограниченного по объему. Откройте Функциональный блок Simulink f3. В функциональном блоке дважды кликните Триггерную Блокировку порта f3. В диалоговом окне параметров блоков, набор Function visibility к scoped. Нажмите Apply и OK.

  3. Настройте функциональный интерфейс путем открытия диалогового окна настройки с помощью одного из этих методов:

    • Щелкните правой кнопкой по 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).

  4. Для аргумента u, набор C/C++ Type Qualifier к Pointer to const.

  5. Нажмите 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).

  6. Нажмите OK, чтобы сохранить ваши изменения.

  7. Сгенерируйте код.

  8. Откройте сгенерированный файл 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 кода

  • Для генерации Кода С++ глобальные функции Simulink несовместимы с интерфейсами класса C++ для образцовых функций точки входа.

  • Настройка интерфейса функции Simulink кода не поддерживает функции Simulink и функционирует вызывающие стороны в Stateflow®.

Смотрите также

|

Похожие темы