Обмен данными между кодом внешнего вызова и сгенерированным кодом

Чтобы экспортировать сгенерированный код во внешний код, вы конфигурируете сгенерированный код так, чтобы он совпадал с интерфейсом данных вашего внешнего кода. Например, если ваш внешний код определяет глобальную переменную для хранения выходных данных, и вам нужен сгенерированный код, чтобы считать эти данные как вход, можно сконфигурировать соответствующий Inport блок, чтобы сгенерированный код взаимодействовал с существующей переменной.

  • Можно сгенерировать повторный код из модели. Сгенерированные функции точки входа обычно принимают данные через аргументы. Ваш код вызова передает данные через эти аргументы. Можно вызвать функции несколько раз в одном приложении - приложение может поддерживать несколько образцы модели. Смотрите раздел Данных Exchange for Reentrant Сгенерированного кода.

  • Когда вы генерируете невходящий код, по умолчанию функции точки входа обмениваются данными между сгенерированным кодом и вашим кодом через глобальные переменные. Можно сгенерировать определения переменных для использования кодом или можно использовать совместно и повторно существующие переменные, которые уже заданы кодом. Смотрите раздел «Обмен данными для невходящего сгенерированного кода».

    Кроме того, можно сконфигурировать функции точки входа для обмена системными входами и выходами (Inport корневого уровня и блоки Outport) через аргументы вместо глобальных переменных. Примените управление прототипом функции к модели, для чего требуется Embedded Coder®. Для получения дополнительной информации об управлении прототипом функции смотрите Сконфигурируйте генерацию кода C для функций точки входа модели.

Для получения общей информации об обмене данными между сгенерированным и внешним кодом, включая то, как соответствовать определенным шаблонам кода С, смотрите Exchange Data Between External C/C + + Code и Simulink Model или Сгенерированный Код.

Обмен данными для входящего сгенерированного кода

Когда вы генерируете входящий код, функции точки входа модели обмениваются данными через аргументы. Можно управлять некоторыми характеристиками аргументов. Для получения дополнительной информации смотрите Управляющие данные и Интерфейс функции в Сгенерированном коде.

Для получения информации о создании отдельного набора данных для каждого сайта вызова во внешнем коде, смотрите Изменение Статического Основного для Выделения и доступа к данным образца модели.

Обмен данными для невходящего сгенерированного кода

Чтобы сделать сгенерированный код читаемым или записанным в элемент сигнала, состояние или данные параметра в качестве глобальной переменной, примените класс памяти к данным в модели. Класс памяти также определяет, экспортирует ли сгенерированный код определение переменной во внешний код или импортирует определение из кода. Для получения общей информации об управлении интерфейсом данных модели, которую вы конфигурируете для генерации невходящего кода, смотрите Интерфейс данных управления для невходящего кода. Для получения примеров смотрите Проект Данных Interface путем настройки блоков Inport и Outport и интеграции кода внешнего приложения с кодом, сгенерированным из ПИД-регулятора.

Когда вы генерируете код, который определяет (выделяет память для) глобальные данные, сгенерированный код экспортирует эти данные. Когда ваш внешний код определяет данные, сгенерированный код импортирует эти данные. Обычно классы памяти, которые импортируют данные, имеют слово Import в имени класса памяти, например ImportedExternPointer.

Управление размещением файлов экспортированных глобальных данных (Embedded Coder)

При экспорте данных из сгенерированного кода с помощью классов памяти генератор кода создает extern декларация. По умолчанию это объявление обычно появляется в сгенерированном заголовочном файле model.h. Можно включать (#include) этот заголовочный файл во внешнем коде.

По умолчанию определение (выделение памяти) экспортированных данных обычно появляется в model.c.

Вы можете управлять размещением объявлений и определений в следующих файлах:

  • Создайте отдельные файлы объектов, которые хранят только данные о глобальном параметре.

  • Модулируйте сгенерированный код путем организации объявлений в отдельные файлы.

Дополнительные сведения об управлении размещением объявлений и определений в файлах см. в разделе Управление размещением определений глобальных данных и объявлений в сгенерированных файлах. Для получения примера смотрите Определение, Инициализация и Декларация Параметра данных.

Предотвратите дублирование кода инициализации для глобальных переменных

Когда ваш внешний код определяет глобальные переменные, можно сгенерировать код, который взаимодействует с этими переменными. Для примера используйте класс памяти ImportFromFile (см. раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде»).

Для импортированных переменных, которые представляют сигнал или данные о состоянии, генератор кода может выдать код инициализации, как описано в Initialization of Signal, State и Parameter Data in the Сгенерированный Код. Если ваш код уже инициализирует переменную, рассмотрите предотвращение генерации повторяющегося кода инициализации. Создайте свой собственный класс памяти и для этого класса памяти установите Data initialization равным None. Для получения информации о создании и применении собственного класса памяти смотрите Задать классы памяти, Разделы памяти и Шаблоны функций для программной архитектуры.

Защита глобальных данных с помощью ключевых слов const и volatile

Когда ваш внешний код и сгенерированный код обмениваются данными через глобальные переменные, можно сгенерировать код, который использует квалификаторы типов C const и volatile для защиты целостности данных и повышения безопасности вашего приложения. Для примера:

  • Применить const в параметре калибровки.

  • Применить volatile глобальной переменной, которая сохраняет выходы аппаратного устройства, работающего асинхронно.

  • Применить const и volatile к сигналам, состояниям и параметрам, которые представляют данные, заданные вашим внешним кодом. Затем сгенерированный код объявляет и взаимодействует с внешними данными с помощью соответствующих определителей типа склада.

У вас должен быть Embedded Coder. Для получения дополнительной информации смотрите Защитить глобальные данные с помощью const и летучих классификаторов типов.

Похожие темы