Для экспорта сгенерированного кода во внешний код необходимо настроить сгенерированный код в соответствии с интерфейсом данных внешнего кода. Например, если внешний код определяет глобальную переменную для хранения выходных данных и для считывания этих данных в качестве входных данных необходим сгенерированный код, можно настроить соответствующий блок Inport таким образом, чтобы сгенерированный код взаимодействовал с существующей переменной.
Из модели можно создать код повторного ввода. Созданные функции точки входа обычно принимают данные через аргументы. Вызывающий код передает данные через эти аргументы. Функции можно вызывать несколько раз в одном приложении - приложение может поддерживать несколько экземпляров модели. См. раздел Обмен данными для созданного повторно кода.
При создании неназначенного кода по умолчанию функции точки входа обмениваются данными между сгенерированным кодом и кодом через глобальные переменные. Можно создать определения переменных для используемого кода или предоставить общий доступ к существующим переменным и повторно использовать их. См. раздел Обмен данными для неназначенного сгенерированного кода.
Кроме того, можно настроить функции начального уровня для обмена системными входами и выходами (блоки ввода и вывода корневого уровня) через аргументы вместо глобальных переменных. Примените управление прототипом функции к модели, для которой требуется Embedded Coder ®. Дополнительные сведения о управлении прототипом функции см. в разделе Настройка генерации кода C для функций точек входа модели (встроенный кодер).
Общие сведения об обмене данными между сгенерированным и внешним кодом, включая сопоставление определенных шаблонов кода C, см. в разделе Обмен данными между внешним кодом C/C + + и моделью Simulink или сгенерированным кодом.
При создании кода входа функции точки входа модели обмениваются данными через аргументы. Можно управлять некоторыми характеристиками аргументов. Дополнительные сведения см. в разделе Управление данными и функциональным интерфейсом в сгенерированном коде.
Сведения о создании отдельного набора данных для каждого узла обработки вызовов во внешнем коде см. в разделе Изменение статического основного канала для назначения и доступа к данным экземпляра модели (встроенный кодер).
Чтобы сгенерированный код считывался или записывался в элемент данных сигнала, состояния или параметра в качестве глобальной переменной, примените класс хранения к данным в модели. Класс хранения также определяет, экспортирует ли созданный код определение переменной во внешний код или импортирует определение из кода. Общие сведения об управлении интерфейсом данных модели, настроенной для создания кода, не являющегося входящим, см. в разделе Интерфейс управляющих данных для кода, не являющегося входящим. Примеры см. в разделе Интерфейс конструкторских данных путем конфигурирования блоков ввода и вывода и интеграции кода внешнего приложения с кодом, сгенерированным контроллером PID (встроенный кодер).
При создании кода, который определяет (распределяет память для) глобальные данные, созданный код экспортирует эти данные. Когда внешний код определяет данные, созданный код импортирует эти данные. Обычно классы хранения, импортирующие данные, имеют слово Import в имени класса хранения, например, ImportedExternPointer.
При экспорте данных из созданного кода с использованием классов хранения генератор кода создает extern объявление. По умолчанию это объявление обычно появляется в созданном файле заголовка . Можно включить (model.h#include) этот файл заголовка во внешнем коде.
По умолчанию определение (выделение памяти) экспортируемых данных обычно отображается в .model.c
Можно управлять размещением файлов описаний и определений следующим образом:
Создайте отдельные файлы объектов, в которых хранятся только данные глобальных параметров.
Модуляризируйте созданный код, организуя объявления в отдельные файлы.
Дополнительные сведения об управлении размещением файлов деклараций и определений см. в разделе Управление размещением глобальных определений и деклараций данных в созданных файлах (Embedded Coder). Пример см. в разделах Определение, инициализация и объявление данных параметров (встроенный кодер).
Когда внешний код определяет глобальные переменные, можно создать код, который взаимодействует с этими переменными. Например, используйте класс хранения ImportFromFile (см. раздел Выбор класса склада для представления контроллинговых данных в сгенерированном коде).
Для импортированных переменных, представляющих данные сигнала или состояния, генератор кода может создать код инициализации, как описано в разделе Инициализация данных сигнала, состояния и параметра в сгенерированном коде. Если код уже инициализирует переменную, попробуйте предотвратить создание повторяющегося кода инициализации. Создайте собственный класс хранения и установите для этого класса хранения значение Инициализация данных None. Сведения о создании и применении собственного класса хранения см. в разделе Определение классов хранения, разделов памяти и шаблонов функций для архитектуры программного обеспечения (Embedded Coder).
const и volatileКогда внешний код и созданный код обмениваются данными через глобальные переменные, можно создать код, использующий квалификаторы типа C. const и volatile для защиты целостности данных и повышения безопасности приложения. Например:
Обратиться const к калибровочному параметру.
Обратиться volatile к глобальной переменной, которая хранит выходные данные аппаратного устройства, работающего асинхронно.
Обратиться const и volatile к сигналам, состояниям и параметрам, представляющим данные, определенные внешним кодом. Затем созданный код объявляет внешние данные и взаимодействует с ними с помощью соответствующих квалификаторов типа склада.
У вас должен быть встроенный кодер. Дополнительные сведения см. в разделе Защита глобальных данных с помощью квалификаторов типа const и volative (Embedded Coder).