Объединенные элементы данных модели и точка входа функционируют с определениями кода
Редактор Отображений Кода является графическим интерфейсом, где можно сконфигурировать элементы данных модели и функции точки входа для генерации кода. Сопоставьте каждую категорию элемента данных модели с определенным классом памяти в модели. Класс памяти задает свойства, такие как внешний вид и местоположение, которое генератор кода использует при создании кода для связанных данных. Можно также сопоставить каждую категорию функций точки входа модели с определенным функциональным шаблоном настройки. Шаблоны задают, как генератор кода производит код для присоединенных функций. В редакторе Отображений Кода можно заменить отображения по умолчанию для определенных функций точки входа. Замените отображения по умолчанию для определенных элементов данных при помощи представления Code Model Data Editor.
Редактор Отображений Кода отображение состоит из таблиц с вкладками: Data Defaults, Function Defaults и Functions. Используйте таблицы, чтобы установить определения кода для категорий элементов данных модели и функций или отдельных функций. Раздел Code Property Inspector отображает ваш выбор и задан ли раздел memory для класса памяти или функционального шаблона настройки.
В Apps gallery, под Code generation, нажимают Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода. Кликните по вкладке Code Mappings.
Во вкладке C Code выберите Settings> Code Mappings.
В холсте модели кликните по перспективному управлению в нижнем правом углу и выберите Code. Затем кликните по вкладке Code Mappings.
Сконфигурируйте генерацию кода для корневых блоков Inport и Outport в модели. Применение настроек по умолчанию может сэкономить время, специально для крупномасштабных моделей, которые используют существенное количество данных. После применения отображений по умолчанию можно настроить отображения для отдельных элементов данных при помощи Model Data Editor.
Скопируйте внешние файлы кода в перезаписываемую папку.
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
Открытая модель rtwdemo_roll
. Сохраните копию в папке модели, где вы скопировали внешние файлы кода.
Откройте приложение Embedded Coder. В Apps gallery, под Code generation, нажимают Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода.
Сконфигурируйте генератор кода к:
Используйте заголовочный файл roll_input_data.h
объявить переменные, представляющие блоки модели Inport.
Представляйте переменные для блоков модели Outport как отдельные глобальные переменные.
Задайте выходные переменные в roll_output_data.c
и объявите их в roll_output_data.h
.
Под Code Mappings нажмите кнопку Refresh.
Кликните по вкладке Data Defaults если не уже выбранный.
Установите класс памяти для категории элемента модели Inports к ImportFromFile
.
В Property Inspector, набор Header File к roll_input_data.h
.
Установите класс памяти для категории элемента модели Outports к ExportToFile
.
Установите Header File на roll_output_data.h
и Definition File к roll_output_data.c
.
Замените исходное местоположение по умолчанию для переменной HDG_Mode
импорта. Та переменная объявляется во внешнем файле
roll_heading_mode.h
.
Откройте Model Data Editor путем нажатия на вкладку Model Data Editor.
Выберите HDG_Mode
строка.
Установите Storage Class на ImportFromFile
.
В Property Inspector расширьте раздел Code . Установите Header File на roll_heading_mode.h
.
Сконфигурируйте генератор кода, чтобы произвести имена переменных в коде для блоков Inport и Outport, которые совпадают с именами переменных во внешних файлах roll_input_data.h
и roll_heading_mode.h
. Установите параметр конфигурации модели Global variables на $N$M
, удаление rt
префикс, который генератор кода применяет по умолчанию.
Включайте внешние исходные файлы roll_input_data.c
и roll_heading_mode.c
в генерации кода и процессе сборки. Установите параметр конфигурации модели Source files на roll_input_data.c roll_heading_mode.c
.
Сохраните модель.
Сгенерируйте код и проверьте, что код, сгенерированный для блоков Inport и Выхода, появляется, как вы ожидаете.
rtwdemo_roll.h
включает эти заголовочные файлы, сопоставленные с классами памяти:
#include "roll_output_data.h" #include "roll_input_data.h" #include "roll_heading_mode.h"
roll_heading_mode.c
включает roll_heading_mode.h
и задает переменную HDG_Mode
.
#include "roll_heading_mode.h" boolean_T HDG_Mode;
roll_input_data.c
задает переменные, объявленные в roll_input_data.h
.
#include "roll_input_data.h" boolean_T AP_Eng; real32_T HDG_Ref; real32_T Rate_FB; real32_T Phi; real32_T Psi; real32_T TAS; real32_T Turn_Knob;
roll_output_data.c
включает это экспортируемое определение данных:
real32_T Ail_Cmd;
roll_output_data.h
включает это экспортируемое объявление данных:
extern real32_T Ail_Cmd;
По умолчанию генератор кода использует идентификатор, называющий правило $R$N
назвать функции точки входа. $R
имя корневой модели. $N
имя функции, например, initialize
шаг
, и terminate
. Чтобы интегрировать сгенерированный код с существующим внешним кодом или выполнить именование стандартов или инструкций, можно настроить правило именования значения по умолчанию. В этом примере показано, как добавить текстовую строку myproj_
как префикс к $R$
. Корректировка правила именования значения по умолчанию может сэкономить время, специально для многоскоростных моделей, для которых генератор кода производит уникальный step
функция для каждого уровня.
Открытая модель rtwdemo_multirate_multitasking
. Сохраните копию в перезаписываемую папку.
Откройте приложение Embedded Coder. В Apps gallery, под Code generation, нажимают Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода.
Создайте функциональный шаблон настройки, который задает правило именования myproj_$R$N
.
Откройте Словарь Embedded Coder. Во вкладке C Code выберите Settings> Embedded Coder Dictionary.
Кликните по вкладке Function Customization Templates.
Нажмите Add.
В столбце Name новой строки таблицы назовите новый шаблон myproj_FunctionTemplate
.
В столбце Function Name войдите, именование управляют myproj_$R$N
.
Закройте словарь Embedded Coder.
Во вкладке C Code, под Code Mappings, кликают по вкладке Function Defaults.
Для Initialize/Terminate и категорий функции Execution, измените функциональный шаблон настройки по умолчанию от Default
к myproj_FunctionTemplate
.
Сохраните модель.
Сгенерируйте код и проверьте имена функций точки входа.
void myproj_rtwdemo_multirate_multitasking_step0(void) /* Sample time: [1.0s, 0.0s] */ { (rtM->Timing.RateInteraction.TID0_1)++; if ((rtM->Timing.RateInteraction.TID0_1) > 1) { rtM->Timing.RateInteraction.TID0_1 = 0; } if (rtM->Timing.RateInteraction.TID0_1 == 1) { rtDW.RateTransition = rtDW.RateTransition_Buffer0; } rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s; rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2; } /* Model step function for TID1 */ void myproj_rtwdemo_multirate_multitasking_step1(void) /* Sample time: [2.0s, 0.0s] */ { rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE; rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s; } void myproj_rtwdemo_multirate_multitasking_initialize(void) { /* (no initialization code required) */ } void myproj_rtwdemo_multirate_multitasking_terminate(void) { /* (no terminate code required) */ }
Можно настроить имена большинства функций точки входа и аргументы функций выполнения, такие как ступенчатые функции и функции Simulink, для модели. То В этом примере показано, как настроить точку входа, функционирует для модели rtwdemo_roll
.
Скопируйте внешние файлы кода в перезаписываемую папку.
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
Открытая модель rtwdemo_roll
. Сохраните копию в папке модели, где вы скопировали внешние файлы кода.
Откройте приложение Embedded Coder. В Apps gallery, под Code generation, нажимают Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода.
Под Code Mappings кликните по вкладке Functions.
Настройте имя шага (выполнение) функция. В столбце Function Name введите имя roll_run
.
Настройте аргументы step
функция. Откройте диалоговое окно настройки для step
функция путем нажатия на прототипную гиперссылку в столбце Function Preview.
Выберите Configure arguments for Step function prototype.
Чтобы открыть таблицу, которая отображает настройки по умолчанию для аргументов, нажмите Get Default.
Настройте аргументы:
От C return argument выпадающий список выберите Ail_Cmd
.
Для каждого порта, в поле C Identifier Name, удаляют arg_
префикс с их имен по умолчанию.
Для HDG_Mode
Inport, от C Type Qualifier выпадающий список, выбирают Pointer
. В C Identifier Name поле изменяют название на HDG_Ref
Нажмите Apply и проверьте, что прототип функции отражает изменения.
Подтвердите изменения путем нажатия на Validate.
Нажмите OK.
Сгенерируйте код.
В представлении Code проверьте обновления в сгенерированном файле C rtwdemo_roll.c
. Найти обновленный step
функция (roll_run
), используйте поле Search.
Выберите step
функция, чтобы проверить ее прототип.
real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean_T AP_Eng, boolean_T *HDG_Mode, real32_T *HDG_Ref, real32_T Turn_Knob)
Model Element Category
— Категория элементов данных моделиНазывает категорию элементов модели Simulink®. Класс памяти, который вы устанавливаете для категории, применяется к элементам в той категории в модели.
Категория элемента модели | Описание |
---|---|
Inports | Входные порты корневого уровня модели. |
Выходные порты | Выходные порты корневого уровня модели. |
Параметры модели | Параметры, которые заданы в модели, такой как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Аргументы параметра модели | Параметры блоков в рабочем пространстве модели, которое вы конфигурируете в качестве аргументов модели. Эти параметры отсоединены в блоке модели, чтобы позволить каждому экземпляру модели ввести свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor + Parameters + Argument. |
Внешние объекты параметра | Параметры, которые вы задаете как объекты в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. |
Разделяемые локальные хранилища данных | Data Store Memory блокирует с параметрами блоков установленный Share across model instances. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. |
Хранилища глобальных данных | Хранилища данных, которые заданы объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. |
Внутренние данные | Локальные данные, такие как хранилища данных, дискретные состояния блока, блокируют выходные сигналы и сигналы пересечения нулем. |
Константы | Блок постоянного значения выход и постоянные параметры в модели. |
Storage Class
— Определение кода для элементов данных моделиОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для элементов данных модели. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Model Function Category
— Категория функций моделиНазывает категорию функций модели Simulink. Функциональный шаблон настройки, который вы устанавливаете для категории, применяется к функциям в той категории в модели.
Функциональная категория модели | Описание |
---|---|
Инициализировать/Отключить | Точка входа функционирует для инициализации и завершения |
Выполнение | Точка входа функционирует для того, чтобы инициировать выполнение и сброс |
Разделяемая утилита | Разделяемые служебные функции |
Function Customization Template
— Определение кода для функцийОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для функций модели. Вы можете должны быть задать функциональный шаблон настройки в Словаре Embedded Coder. Шаблоны не доступны по умолчанию.
Source
— Тип функции точки входаИдентифицирует тип функции точки входа. Для основанных на уровне моделей это свойство обеспечивает частоту дискретизации step
функции.
Function Customization Template
— Определение кода для функцииОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для функции модели.
Function Name
— Назовите для функцииНазовите это использованием генератора кода для функции модели. Для ступенчатой функции, ступенчатой функции базовой ставки для основанных на уровне моделей, ячейка таблицы Function Name обеспечивает доступ к кнопке, которая открывает диалоговое окно Configure C Step Function Interface. Кликните по имени функции, кликните по вертикальным точкам и нажмите Configure Prototype. Чтобы настроить целый интерфейс ступенчатой функции, используйте диалоговое окно Configure C Step Function Interface.
Function Preview
— Предварительный просмотр прототипа функцииПредварительный просмотр гиперссылки прототипа функции точки входа. Чтобы проверить прототип, рассмотрите прототипный предварительный просмотр. Чтобы открыть диалоговое окно, где можно настроить прототип, кликните по гиперссылке. Для получения дополнительной информации смотрите, Конфигурируют Настройки по умолчанию для Функций.