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

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

  • Можно сгенерировать повторно используемый код из модели. Сгенерированные функции точки входа обычно принимают данные через аргументы. Ваш код вызова передает данные через эти аргументы. Можно вызвать функции многократно в отдельном приложении — приложение может обеспечить несколько экземпляров модели. Смотрите Обмен данными для Повторно используемого Сгенерированного кода.

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

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

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

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

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

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

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

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

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

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

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

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

Можно управлять размещением файла объявлений и определений:

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

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

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

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

Когда ваш внешний код задает глобальные переменные, можно сгенерировать код, который взаимодействует с теми переменными. Например, используйте класс памяти ImportFromFile (см., выбирают Storage Class for Controlling Data Representation in Generated Code).

Для импортированных переменных, которые представляют данные состояния или сигнала, генератор кода может произвести код инициализации как описано в Инициализации Сигнала, состояния и Данных о Параметре в Сгенерированном коде. Если ваш код уже инициализирует переменную, рассмотрите предотвращение генерации дублирующегося кода инициализации. Создайте свой собственный класс памяти и, для того класса памяти, установите Data initialization на None. Для получения информации о создании и применении вашего собственного класса памяти, смотрите, Задают Классы памяти, Разделы Памяти и Шаблоны функций для Программной архитектуры.

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

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

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

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

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

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

Похожие темы