Создайте определения кода, который генерация кода системы управления для данных модели и функций
Чтобы открыть Словарь Embedded Coder, используйте один из этих методов:
В редакторе Отображений Кода (см., что Код Сопоставляет Редактор), кликните по значку Словаря Embedded Coder.
В окне модели выберите Code> C/C++ Code> Embedded Coder Dictionary.
Окно Embedded Coder Dictionary отображает определения генерации кода, которые хранятся в образцовом файле. Если модель соединена со словарем данных, окно также отображает определения, которые хранятся в том словаре данных или, если применимо, в словаре, на который ссылаются. Столбец Source указывает, где каждое определение хранится.
Открыть Словарь Embedded Coder в словаре данных Simulink®, в панели Model Hierarchy Model Explorer:
Под узлом словаря выберите узел Embedded Coder.
Если вы не видите узел, щелкните правой кнопкой по узлу словаря и выберите Show Empty Sections.
В Диалоговой панели (правая панель), нажмите Open Embedded Coder Dictionary.
В модели создайте класс памяти, который агрегировал внутренние данные модели, включая состояния блока, в структуру, характеристиками которой можно управлять. Затем проверьте класс памяти путем генерации кода из модели.
Откройте модель rtwdemo_roll
в качестве примера.
rtwdemo_roll
Включите перспективу Кода. В Редакторе Simulink выберите Code> C/C++ Code> Configure Model in Code Perspective.
Ниже диаграммы модели, в редакторе Отображений Кода, выбирают вкладку Data Defaults.
Кликните по значку Словаря Embedded Coder. Окно Embedded Coder Dictionary отображает определения генерации кода, которые хранятся в образцовом файле.
В окне Embedded Coder Dictionary нажмите Add.
Выберите новый класс памяти, который появляется в нижней части списка, StorageClass1
. В панели Property Inspector справа, устанавливает значения свойств, перечисленные в этой таблице.
Свойство | Значение |
---|---|
Name | InternalStruct |
Header File | internalData_$R.h |
Definition File | internalData_$R.c |
Storage Type | Structured |
Structure Properties> Type Name | internalData_T_$M |
Structure Properties> Instance Name | internalData_$M |
После внесения ваших изменений, в нижней области, проверяют, что предварительный просмотр псевдокода отражает то, что вы ожидаете.
Возвратитесь к редактору Отображений Кода. Выберите строку Internal data и установите Storage Class на InternalStruct
.
В диалоговом окне Configuration Parameters, на Code Generation> панель Code Placement, устанавливает File packaging format на Modular
.
Сгенерируйте код.
В Редакторе Simulink Представление кода откройте и осмотрите файл internalData_rtwdemo_roll.h
. Файл задает тип структуры internalData_T_
, поля которого представляют состояния блока в модели.
/* Storage class 'InternalStruct', for system '<Root>' */ typedef struct { real32_T FixPtUnitDelay1_DSTATE; /* '<S7>/FixPt Unit Delay1' */ real32_T Integrator_DSTATE; /* '<S1>/Integrator' */ int8_T Integrator_PrevResetState; /* '<S1>/Integrator' */ } internalData_T_;
Файл также объявляет глобальную переменную структуры под названием internalData_
.
/* Storage class 'InternalStruct' */ extern internalData_T_ internalData_;
Откройте и осмотрите файл internalData_rtwdemo_roll.c
. Файл выделяет память для internalData_
.
/* Storage class 'InternalStruct' */ internalData_T_ internalData_;
С шаблоном функции можно задать правило, которое управляет именами сгенерированных функций точки входа. Этот метод помогает сэкономить время и усилие по обслуживанию в модели со многими функциями точки входа, такими как модель экспорта функций или многоскоростная, многозадачная модель.
Этот пример показывает, как создать шаблон функции, который указывает, что именование управляет func_$N_$R
. $N
является базовым именем каждой сгенерированной функции, и $R
является именем модели Simulink.
Откройте модель rtwdemo_mrmtbb
в качестве примера.
Обновите блок-схему. Эта многозадачная модель имеет два уровня выполнения, таким образом, сгенерированный код включает две соответствующих функции точки входа.
В модели, параметр конфигурации модели набора System target file к ert.tlc
. Чтобы использовать функциональный шаблон настройки, необходимо использовать основанный на ERT системный конечный файл.
В Редакторе Simulink включите перспективный режим Кода и откройте Словарь Embedded Coder.
В Словаре Embedded Coder, на вкладке Function Customization Templates, нажимают Add.
Для нового шаблона функции, набор эти свойства:
Name к myFunctions
.
Function Name к func_$N_$R
.
После внесения ваших изменений проверьте, что предварительный просмотр псевдокода отражает то, что вы ожидаете.
На вкладке Function Defaults, для Initialize/Terminate и строк Execution, устанавливает Function Customization Template на myFunctions
.
Сгенерируйте код.
На правой стороне перспективы Кода, в панели Представления кода, открытой и, осматривают файл rtwdemo_mrmtbb.c
. Файл задает две функции выполнения, func_step0_rtwdemo_mrmtbb
и func_step1_rtwdemo_mrmtbb
, имена которого соответствуют правилу, что вы задали в шаблоне функции.
Для примера, который показывает, как создать раздел memory, смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.
Этот пример показывает, как создать класс памяти, который помещает определения глобальной переменной и объявления в файлах, имена которых зависят от имени модели. Вы создаете две копии класса памяти так, чтобы можно было использовать одну копию с данными о параметре (категория данных Local parameters) и одну копию с другими данными.
Как правило, сгенерированный код инициализирует данные о параметре статически, вне любой функции, и инициализирует другие данные динамически в образцовой функции инициализации. Когда вы создаете класс памяти при помощи Custom Storage Class Designer или Словаря Embedded Coder, вы устанавливаете свойство Data Initialization задать механизм инициализации.
В Словаре Embedded Coder, для каждого класса памяти, необходимо выбрать Static
или Dynamic
. Рассмотрите создание одной копии класса памяти для данных о параметре (Static
) и одна копия для других данных (Dynamic
).
Открытая модель rtwdemo_roll
в качестве примера.
Включите Редактору Simulink перспективный режим Кода.
Ниже диаграммы модели, в редакторе Отображений Кода, кликают по значку Словаря Embedded Coder.
В Словаре Embedded Coder нажмите Add.
Для нового класса памяти, набор эти свойства:
Name к SigsStates
Header File к $R_my_data.h
Definition File к $R_my_data.c
По умолчанию свойство Data Initialization установлено в Dynamic
, что означает, что класс памяти подходит для использования с сигналами, состояниями и хранилищами данных.
После внесения ваших изменений проверьте, что предварительный просмотр псевдокода отражает то, что вы ожидаете.
Нажмите Duplicate. Появляется новый класс памяти, SigsStates_copy
.
Для нового класса памяти, набор эти свойства:
Name к Params
Data Initialization к Static
После внесения ваших изменений проверьте, что предварительный просмотр псевдокода отражает то, что вы ожидаете.
Возвратитесь к редактору Отображений Кода.
На вкладке Data Defaults, для строки Local parameters, в столбце Storage Class, выбирают Params
.
Для строки Internal data, набор Storage Class к SigsStates
.
Сконфигурируйте некоторые элементы данных параметра в модели так, чтобы оптимизация не устраняла их из сгенерированного кода. Откройте Model Data Editor.
Выберите вкладку Parameters.
В модели перейдите в подсистему BasicRollMode
.
Обновите блок-схему. Теперь, таблица данных содержит строки, которые соответствуют переменным рабочей области, используемым моделью.
Рядом с полем Filter contents активируйте кнопку Filter using selection.
В модели выберите три блока Усиления.
Обновите схему.
В Model Data Editor, в таблице данных, выбирают три строки, которые соответствуют переменным dispGain
, intGain
и rateGain
в рабочем пространстве модели.
Для каждой переменной, в столбце Storage Class, выбирают Convert to parameter object
.
Model Data Editor преобразовывает переменные рабочей области в объекты Simulink.Parameter
. Новые объекты используют класс памяти Model default
, что означает, что они получают класс памяти по умолчанию, который вы задали для Local parameters в редакторе Отображений Кода.
В диалоговом окне Configuration Parameters, на Code Generation> панель Code Placement, устанавливает File packaging format на Modular
.
Сгенерируйте код.
В Представлении кода откройте и осмотрите файлы rtwdemo_roll_my_data.c
и rtwdemo_roll_my_data.h
. Эти файлы задают и объявляют глобальные переменные, которые соответствуют объектам параметра и некоторым состояниям блока, таким как состояние блока Integrator в подсистеме BasicRollMode
.
/* Storage class 'SigsStates' */ real32_T rtFixPtUnitDelay1_DSTATE; real32_T rtIntegrator_DSTATE; int8_T rtIntegrator_PrevResetState; /* Storage class 'Params' */ real32_T dispGain = 0.75F; real32_T intGain = 0.5F; real32_T rateGain = 2.0F;
Можно сконфигурировать Словарь Embedded Coder, чтобы обратиться к определениям генерации кода, которые вы храните в пакете (см., Создают Определения Кода, чтобы Заменить Настройки по умолчанию). Те определения затем кажутся доступными для выбора в редакторе Отображений Кода. В этом примере вы конфигурируете Словарь Embedded Coder в rtwdemo_roll
, чтобы отослать к определениям, сохраненным во встроенном пакете в качестве примера ECoderDemos
.
Откройте Словарь Embedded Coder для rtwdemo_roll
. Для инструкций смотрите, Создают и Проверяют Пользовательский Класс памяти.
В окне Embedded Coder Dictionary нажмите Manage Packages.
В диалоговом окне Manage Packages нажмите Refresh. Ожидайте, пока больше опций не появляется в Select package выпадающий список.
Установите Select package на ECoderDemos
и нажмите Load.
В окне Embedded Coder Dictionary, на вкладке Storage Classes, таблица показывает классы памяти, заданные в пакете ECoderDemos
. Теперь, в rtwdemo_roll
, можно выбрать эти классы памяти в редакторе Отображений Кода на вкладке Data Defaults.
Чтобы разгрузить пакет, в диалоговом окне Manage Packages, выбирают пакет в Select package выпадающий список и нажимают Unload.
Для примера, который показывает, как совместно использовать определения генерации кода между моделями при помощи словарей данных, см. Словарное определение Embedded Coder Доли Между Моделями.
Для примера, который показывает, как сконфигурировать отображения кода по умолчанию в разделяемом Словаре Embedded Coder, смотрите, Конфигурируют Отображение Кода По умолчанию в Разделяемом Словаре.
Вы не можете создать или изменить определения генерации кода программно. Однако можно удалить, скопировать и переместить определения кода между моделями и словарями данных при помощи этих функций:
Класс памяти или функциональный шаблон настройки, который вы создаете в Словаре Embedded Coder, не могут использовать раздел memory, который вы загружаете от пакета (как описано в, Обращаются к Определениям Генерации кода в Пакете). Используйте раздел memory, заданный в Словаре Embedded Coder.
Вы не можете создать определения генерации кода в файле модели .mdl
.
Для дополнительных ограничений для определений генерации кода в Словаре Embedded Coder словаря данных (файл .sldd
), смотрите, Развертывают Определения Генерации кода.