В этом примере показано, как настроить имя ступенчатой функции и аргументы для основанной на уровне модели. Чтобы придерживаться инструкций кода и стандартов или легко интегрировать сгенерированный код с внешним кодом, можно настроить эти аспекты ступенчатой функции:
FunctionName
Имена аргумента
Порядок аргументов
Возвращаемое значение и спецификаторы данных об аргументе
Буферизация оптимизации для аргументов
Можно сделать индивидуальные настройки ступенчатой функции при помощи диалогового окна настройки модели специфичного, которое вы открываете из редактора Отображений Кода.
1. Откройте и сохраните копию модели rtwdemo_fcnprotoctrl к перезаписываемому местоположению.
2. Откройте приложение Embedded Coder.
3. Кликните по вкладке Code Mappings - C.
4. В редакторе Отображений Кода кликните по вкладке Functions. Чтобы обновить представление, нажмите кнопку отображений Обновления кода.
5. Для строки ступенчатой функции, в Функциональном столбце Предварительного просмотра, кликают по прототипной гиперссылке, чтобы открыть диалоговое окно Configure C Step Function Interface.
В диалоговом окне Configure C Step Function Interface поле прототипа функции C отображает предварительный просмотр изменений, которые вы вносите в прототипа функции.
Для моделей, сконфигурированных, чтобы сгенерировать код мультиэкземпляра, смотрите, Генерируют Повторно используемый Код от Топ-моделей.
1. В диалоговом окне Configure C Step Function Interface, набор C Имя Ступенчатой функции к fcnprotoctrl_run
. Функциональный предварительный просмотр обновляется, чтобы отразить новое имя функции.
2. Нажмите Apply, закройте диалоговое окно и сохраните модель.
3. Сгенерируйте код и проверьте смену имени.
Кликните по вкладке Code. В списке файлов Представления кода выберите файл rtwdemo_fcnprotoctrl.h
. В Поле поиска проверьте, что список элементов кода включает имя функции fcnprotoctrl_run
. Чтобы просмотреть объявление, выберите имя функции.
Объявление подсвечено в коде:
Проверьте смену имени в файле rtwdemo_fcnprotoctrl.c
. Чтобы просмотреть исходный код (определение), в Поле поиска, выбирают fcnprotoctrl_run
.
Для большего количества примеров смотрите, что Значение по умолчанию Переопределения Называет для Функций Точки входа Индивидуума C.
Сконфигурируйте структуры глобальных данных
По умолчанию главная или модель, на которую ссылаются, использует void-void
ступенчатая функция, чтобы передать данные. Этот тип функции позволяет сгенерированному коду связаться с внешним кодом путем доступа к глобальным данным, хранимым как структуры данных, которые находятся в общей памяти.
Сконфигурировать модель, чтобы иметь void-void
ступенчатая функция, откройте диалоговое окно Configure C Step Function Interface и очистите аргументы Configure для прототипного флажка Ступенчатой функции. Проверьте изменение в предварительном просмотре прототипа функции C.
Сконфигурируйте аргументы
Основанные на уровне ступенчатые функции модели могут использовать аргументы, чтобы передать данные. Можно настроить эти настройки аргумента:
Возвращаемое значение
Введите спецификаторы
Имена
Порядок
Пример
1. Откройте диалоговое окно Configure C Step Function Interface. Кликните по вкладке Code Mappings - C. Во вкладке Functions кликните по функциональному предварительному просмотру для ступенчатой функции.
2. В диалоговом окне Configure C Step Function Interface выберите аргументы Configure для прототипа Ступенчатой функции.
3. Нажмите значение по умолчанию Get. Диалоговое окно расширяется, чтобы показать поле для конфигурирования функционального возвращаемого значения и таблицы что аргументы ввода и вывода списков с настройками по умолчанию.
4. Настройте возвращаемое значение ступенчатой функции. Установите возвращаемый аргумент C на любой void
или один из выходных аргументов. В данном примере выберите void
.
5. Для каждого аргумента задайте Спецификатор Типа C.
Спецификаторы типа:
Value
: Значение, например, arg
Const
: Значение с const
спецификатор, например, const arg
Pointer to const
: Значение с const
спецификатор и ссылаемый указателем, например, const
*
arg
Pointer
: Ссылка указателем, например, *
arg
Const pointer to const
: Значение с const
спецификатор, ссылка указателем, и самим указателем, например, const
*
const arg
Модели, которые включают модель, на которую ссылаются,
Для модели, на которую ссылаются спецификатор типа для корневого входного параметра в интерфейсе ступенчатой функции установлен в Auto
. Генератор кода использует интерфейсную спецификацию путем генерации броска типа, который отбрасывает const
спецификатор от исходного сигнала.
Для родительского элемента эталонной модели спецификатор типа для исходного сигнала установлен в значение кроме Auto
. Чтобы заменить это поведение, добавьте const
введите спецификатор к модели, на которую ссылаются.
В данном примере не внесите изменения в спецификатор типа C.
6. Настройте имена аргумента путем редактирования значений в столбце Имени Идентификатора C.
В данном примере поменяйте имена аргументов путем удаления символов нижнего подчеркивания, например, измените arg_In1 в argIn1.
7. Настройте порядок аргументов путем перетаскивания строк таблицы к новым позициям.
В данном примере переместите Out1 в первое положение. Съезжайте 2 к третьей позиции.
8. Подтвердите, примените свои изменения, закройте диалоговое окно и сохраните модель.
9. Сгенерируйте код и проверьте изменения в Представлении кода.
Проверьте свои изменения в файле rtwdemo_fcnprotoctrl.h
путем проверки, что Поле поиска включает функциональный fcnprotoctrl_run
.To просматривают объявление функции, выбирают имя функции.
Проверьте свой файл изменений rtwdemo_fcnprotoctrl.c.
Чтобы просмотреть определение для функции, выберите имя функции fcnprotoctrl_run
.
Прототип, отличающийся от предварительного просмотра
В диалоговом окне Configure C Step Function Interface предварительный просмотр прототипа функции для модели, на которую ссылаются, может показать меньше аргументов, чем прототип функции в сгенерированном коде.
Например, рассмотрите модель под названием mdlref_counter
с импортом (arg_input
), выходной порт (arg_output
), и насыщение блокируется с пределами, которые имеют имена аргумента параметра рабочей области lower_saturation_limit
и upper_saturation_limit
. Диалоговое окно Configure C Step Function Interface показывает предварительный просмотр прототипа функции как:
mdlref_counter_custom(arg_input, arg_output)
В сгенерированном коде прототип включает аргументы параметра:
mdlref_counter_custom(real_T arg_input, real_T arg_output, real_T rtp_lower_saturation_limit, real_T rtp_upper_saturation_limit)
Можно оптимизировать буферизацию, требуемую для аргументов I/O в ступенчатой функции для модели. Если вы придерживаетесь этих требований при конфигурировании импорта и пары выходного порта, генератор кода объединяет соответствующие аргументы и снова использует связанный буфер.
Блоки Inport и Выходного порта должны иметь те же свойства, включая тип данных, размерность и частоту дискретизации.
Частота дискретизации блоков Inport и Outport должна совпасть с базовой ставкой модели.
Условно выполняемая подсистема не может управлять блоком Outport.
Один, невиртуальный блок выход должен управлять блоком Outport. Например, блок Mux, который объединяет несколько буферов, не может управлять блоком Outport.
В диалоговом окне Configure C Step Function Interface необходимо сконфигурировать Inport и Outport с тем же спецификатором типа C и именем идентификатора.
В этом примере показано, как объединить аргументы для портов In3
и Out2
например, модель rtwdemo_fcnprotoctrl.
1. Откройте диалоговое окно Configure C Step Function Interface для модели rtwdemo_fcnprotoctrl
.
2. Откройте отображение для аргументов путем выбора аргументов Configure для прототипа Ступенчатой функции.
3. Для портов In3
и Out2
, установите Спецификатор Типа C to Pointer
и имя идентификатора C к sharedArg
.
4. Проверьте, что предварительный просмотр показывает объединенный аргумент для argIn3
и argOut2
.
5. Подтвердите, примените свои изменения, закройте диалоговое окно и сохраните модель.
6. Сгенерируйте и просмотрите код. В Представлении кода ищите fcnprotoctrl_run
функционируйте и проверяйте функциональный интерфейс. В данном примере разделяемый аргумент появляется в коде чтения для блока Inport и коде записи для блока Outport.