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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы