Объединенные элементы данных модели и точка входа функционируют с определениями кода
Редактор Отображений Кода является графическим интерфейсом для конфигурирования элементов данных модели и функций точки входа для генерации кода. Сопоставьте каждую категорию элемента данных модели с определенным классом памяти в модели. Класс памяти задает свойства (например, внешний вид и местоположение), который генератор кода использует при создании кода для связанных данных. Точно так же сопоставьте каждую категорию образцовых функций точки входа с определенным функциональным шаблоном настройки. Шаблоны задают, как генератор кода производит код для присоединенных функций. В редакторе Отображений Кода можно заменить отображения по умолчанию для определенных функций точки входа. Замените отображения по умолчанию для определенных элементов данных при помощи представления Code Model Data Editor.
Редактор Отображений Кода отображение состоит из трех таблиц с вкладками: Entry-Point Functions, Data Defaults и Function Defaults. Используйте таблицы, чтобы установить определения кода для отдельных функций точки входа или определения кода по умолчанию для категорий элементов данных модели и функций. Раздел Code Property Inspector показывает ваш выбор и задан ли раздел memory для класса памяти или функционального шаблона настройки.
Чтобы подготовить модель к генерации кода, используйте Быстрый запуск Embedded Coder. Быстрый запуск помещает вашу модель в перспективу Кода, которая включает редактор Отображений Кода.
В окне модели кликните по перспективному управлению в нижнем правом углу и выберите Code.
В окне модели выберите Code> C/C++ Code> Configure Model in Code Perspective.
Если вы закрываете редактор Отображений Кода, окно Model Editor остается в перспективном режиме Кода. Чтобы вновь открыть редактор Отображений Кода, выберите View> Code Mappings.
Этот пример показывает, как сконфигурировать генерацию кода для корневых блоков Inport и Outport в модели. Применение настроек по умолчанию может сэкономить время, специально для крупномасштабных моделей, которые используют существенное количество данных. После применения отображений по умолчанию можно настроить отображения для отдельных элементов данных при помощи Model Data Editor.
Скопируйте внешние файлы кода в свою текущую папку MATLAB.
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
.
Перспектива открытого кода путем выбора Code> C/C++ Code> Configure Model in Code Perspective.
Сконфигурируйте генератор кода к:
Используйте заголовочный файл roll_input_data.h
, чтобы объявить переменные, представляющие блоки модели Inport.
Представляйте переменные для блоков модели Outport как отдельные глобальные переменные.
Задайте выходные переменные в roll_output_data.c
и объявите их в roll_output_data.h
.
Откройте редактор Отображений Кода. Кликните по вкладке Data Defaults если не уже выбранный.
Установите класс памяти для категории элемента модели Inports к ImportFromFile
.
В Property Inspector, набор Header File к roll_input_data.h
.
Установите класс памяти для категории элемента модели Outports к ExportToFile
.
В Property Inspector, набор 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
.
Установите 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 и Вывода, появляется, как вы ожидали.
roll_rtwdemo_roll.h
включает три заголовочных файла, сопоставленные с классами памяти:
#include "roll_output_data.h" #include "roll_heading_mode.h" #include "roll_input_data.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
, step
и terminate
. Чтобы объединяться генерируют код с существующим внешним кодом или выполнить именование стандартов или инструкций, можно настроить правило именования значения по умолчанию. Этот пример показывает, как добавить текстовую строку myproj_
как префикс к $R$
. Корректировка правила именования значения по умолчанию может сэкономить время, специально для многоскоростных моделей, для которых генератор кода производит уникальную функцию step
для каждого уровня.
Открытая модель rtwdemo_multirate_multitasking
и сохраняет копию в перезаписываемое местоположение.
Создайте функциональный шаблон настройки, который задает правило именования myproj_$R$N
.
В окне модели откройте Словарь Embedded Coder путем нажатия на Code
> C/C++ Code
> Embedded Coder Dictionary
.
Кликните по вкладке Function Customization Templates.
Нажмите Add.
В столбце Name новой строки таблицы назовите новый шаблон myproj_FunctionTemplate
.
В столбце Function Name войдите, именование управляют myproj_$R$N
.
Закройте словарь кодера.
Перспектива открытого кода путем выбора Code> C/C++ Code> Configure Model in Code Perspective.
Для 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
.
Скопируйте внешние файлы кода в свою текущую папку MATLAB.
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
.
Введите перспективу Кода путем выбора Code> C/C++ Code> Configure Model in Code Perspective.
Откройте редактор Отображений Кода и выберите вкладку Entry-Point Functions.
Настройте имя функции функции точки входа использование одного из этих методов:
В соответствии со столбцом Function Name, непосредственно отредактируйте имя функции.
В соответствии со столбцом Function Preview, кликните по прототипной гиперссылке функции, чтобы открыть диалоговое окно настройки. В C Initialize 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_
из их имен по умолчанию.
Для Inport HDG_Mode
, из выпадающего списка C Type Qualifer, выбирают Pointer
. В C Identifier Name поле изменяют название на HDG_Ref
Нажмите Apply и проверьте, что прототип функции отражает изменения.
Подтвердите изменения clicking Validate.
Нажмите OK, чтобы выйти из диалогового окна.
Сгенерируйте код и перейдите к Представлению кода.
Проверьте обновления в сгенерированном файле C, rtwdemo_roll.c
. Используйте поле Search, чтобы найти обновленную функцию step
(roll_run
) как элемент в списке.
Выберите функцию 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)