Embedded Coder® уменьшает усилие для конфигурирования данных и функциональных интерфейсов путем обеспечения способа задать настройки по умолчанию для категорий элементов данных и функций через модель. Применение настроек по умолчанию может сэкономить время и снизить риск представления ошибок в коде, специально для больших моделей и моделей, из которых вы генерируете код мультиэкземпляра. После применения настроек по умолчанию можно выборочно заменить настройки по умолчанию для отдельных элементов данных и функций.
Настройте интерфейс данных модели rtwdemo_roll
путем конфигурирования функционального roll_control_step
к:
Считайте входные данные из глобальных переменных, которые объявлены и заданы во внешних файлах roll_input_data.h
и roll_input_data.c
.
Запишите выходные данные в глобальные переменные, которые генератор кода объявляет в output_data.h
и задает в output_data.c
.
Чтобы внести эти изменения, в Командном окне MATLAB®, копируют эти внешние файлы кода в ваш текущий 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'));
Изменения конфигурации интерфейса данных, которые вы делаете, зависят от этих файлов, являющихся доступным для генерации кода и процесса сборки. Процесс сборки компилирует сгенерированный код с кодом, который находится в этих файлах.
Сконфигурируйте настройки генерации кода по умолчанию для импорта модели и выходных портов.
Сконфигурируйте блоки Inport на корневом уровне модели, чтобы появиться в сгенерированном коде как отдельные глобальные переменные, заданные внешним кодом. В редакторе Отображений Кода, на вкладке Data Defaults, для категории Inports, устанавливает Storage Class на ImportFromFile
.
С этой установкой сгенерированный код не задает глобальные переменные, которые представляют данные об импорте. Вместо этого оператор #include
включает заголовочный файл, который объявляет входные переменные. Вы задаете имя заголовочного файла с Property Inspector.
Откройте Property Inspector. В правом нижнем углу окна Editor Simulink® кликните по вкладке Property Inspector.
В Property Inspector, свойстве HeaderFile набора к roll_input_data.h
.
Чтобы видеть, как объявления extern
во внешнем заголовочном файле имя roll_input_data.h
входные переменные, из Окна Команды MATLAB, открывают roll_input_data.h
.
extern boolean_T AP_Eng; extern real32_T HDG_Ref; extern real32_T Rate_FB; extern real32_T Phi; extern real32_T Psi; extern real32_T TAS; extern real32_T Turn_Knob;
Сконфигурируйте генерацию кода, называющую правило для глобальных переменных. По умолчанию генератор кода называет глобальные переменные с префиксным rt
. Для генератора кода, чтобы произвести код, который совпадает с объявлениями внешней переменной в roll_input_data.h
, сконфигурируйте генерацию кода, называющую правило для глобальных переменных соответственно.
Откройте диалоговое окно Model Configuration Parameters.
Перейдите к Code Generation> панель Symbols.
Установите параметр, которым управляет Global variables к именованию, $N$M
(удалите префикс rt
). Маркерный $N
представляет имя элемента данных в модели, например, имя блока Inport или Outport. Маркерный $M
представляет искажающий имя текст, который генератор кода вставляет, при необходимости, чтобы избежать столкновений имени с другими глобальными переменными в коде.
Примените изменение.
Сконфигурируйте блоки Выходного порта на корневом уровне модели, чтобы появиться в сгенерированном коде как отдельные глобальные переменные. В окне Simulink Editor, в редакторе Отображений Кода, на вкладке Data Defaults, для категории Outports, устанавливает Storage Class на ExportToFile
.
Сгенерированный код объявляет и задает выходные переменные в заголовке и файлах определения, которые вы задаете с Property Inspector.
В Property Inspector задайте имена, которые будут использоваться для сгенерированного заголовка и файлов определения. Установите свойство HeaderFile на roll_output_data.h
и свойство DefinitionFile к roll_output_data.c
.
Сконфигурируйте генерацию кода для модели, чтобы включать внешние исходные файлы roll_input_data.c
и roll_heading_mode.c
. В диалоговом окне Configuration Parameters, набор Code Generation> Custom Code> Additional build information> Source files к roll_input_data.c roll_heading_mode.c
. Затем нажмите Apply и OK.
Сохраните модель. Регенерируйте код путем нажатия кнопки.
Ошибка компилятора указывает, что переменная HDG_Mode
не объявляется. Та переменная не объявляется в заголовочном файле roll_output_data.h
, который вы объявили как заголовочный файл по умолчанию для импорта. Вы фиксируете эту ошибку в следующем разделе этого примера.
Модель сконфигурирована, чтобы открыть отчет генерации кода после того, как генерация кода будет завершена. Минимизируйте это окно отчета для исследования позже в этом примере.
Вы сконфигурировали блоки Inport, чтобы использовать внешний заголовочный файл, чтобы объявить и задать входные переменные. В Представлении кода подтвердите, что сгенерированный код включает этот внешний заголовочный файл путем поиска roll_input_data.h
.
Ищите корневой уровень имя блока Inport, HDG_Ref
. При печати выберите поисковое предложение с зеленым значком V
. Это поисковое предложение находит экземпляры HDG_Ref
используемыми в качестве переменной в сгенерированном коде. Подтвердите, что HDG_Ref
задан как отдельная глобальная переменная.
В модели, rtwdemo_roll
, кликают по блоку Outport Ail_Cmd
. Представление кода подсвечивает код в rtwdemo_roll.c
, который соответствует блоку. В коде установите свой курсор на меню замещающего знака выше выходной переменной Ail_Cmd
. Диалоговое окно трассируемости может показать вам определения переменной и элементы модели, которые соответствуют коду. Диалоговое окно подтверждает, что Ail_Cmd
задан как отдельная глобальная переменная. Кликните по коду определения, чтобы видеть определение в output_data.c
.
Настройки, которые вы выбираете для категории под Data Defaults, применяются к элементам в той категории через модель. Чтобы заменить настройки по умолчанию для отдельного элемента данных, используйте Model Data Editor.
Когда вы, сгенерированный код после конфигурирования настроек по умолчанию для импорта и выходных портов, ошибка компилятора указала, что переменная HDG_Mode
не объявляется. Можно зафиксировать ту ошибку путем переопределения настройки по умолчанию для блока Inport HDG_Mode
.
Откройте Model Data Editor. В перспективе Кода, в соответствии с редактором Отображений Кода, кликают по вкладке Model Data Editor.
В Model Data Editor, на вкладке Inports/Outports, избранный источник HDG_Mode
.
Установите Storage Class на ImportFromFile
и Header File к roll_heading_mode.h
.
На основе этих настроек генератор кода импортирует объявление для внешней переменной HDG_Mode
от заголовочного файла roll_heading_mode.h
.
extern boolean_T HDG_Mode;
Сохраните модель и регенерируйте код.
Минимизируйте окно отчета генерации кода для исследования позже в этом примере.
В Представлении кода ищите roll_heading_mode.h
и подтвердите, что это включено в сгенерированный код с конфигурационным файлом по умолчанию roll_input_data.h
.
Ищите HDG_Mode
и подтвердите, что он задан как отдельная глобальная переменная.
Затем, сконфигурируйте параметр модели, чтобы быть глобальной переменной в сгенерированном коде. Как глобальная переменная, можно настроить значение параметров во время выполнения.