Настройте, как и когда генератор кода заменяет код C/C + +, который он создает по умолчанию для функций и операторов, путем разработки пользовательской библиотеки замены кода. Библиотеки можно разрабатывать в интерактивном режиме с помощью средства замены кода или программным способом.
Разработка библиотек, адаптированных к конкретным требованиям приложений
Добавление идентификаторов в список зарезервированных ключевых слов, рассматриваемых генератором кода при замене кода
Настройка процесса сопоставления и замены генератора кода для функций
Начните разработку библиотеки Quick Start Code Replacement Library - Simulink ®.
Когда генератор кода обнаруживает узел вызова для функции или оператора, он:
Создает и частично заполняет объект записи замены кода именем функции или оператора или ключевыми и концептуальными аргументами.
Использует объект entry для запроса сконфигурированной библиотеки замены кода на соответствие концептуальному представлению. Генератор кода выполняет поиск совпадений в таблицах в библиотеке замены кода в порядке их отображения в библиотеке. При поиске совпадения генератор кода учитывает:
Концептуальное имя или ключ
Аргументы, включая количество, тип, квалификаторы типов и сложность
Алгоритм (метод вычисления)
Режимы насыщения и округления с фиксированной точкой
Приоритет
При наличии совпадения генератор кода возвращает объект замены кода, полностью заполненный концептуальным представлением, представлением реализации и приоритетом. Если генератор кода находит несколько совпадений в таблице, приоритет записи определяет совпадение. Приоритет может находиться в диапазоне от 0 до 100. Наивысший приоритет - 0. Генератор кода использует запись с более высоким приоритетом по сравнению с аналогичной записью с более низким приоритетом.
Использует прототип функции замены C или C++ в объекте замены кода для создания кода.
Проверка замены кода - возможно, что замена кода ведет себя иначе, чем вы ожидаете. Например, типы данных, наблюдаемые при вводе генератора кода, могут не совпадать с типами данных, используемыми генератором кода в качестве промежуточных типов данных во время операции. Проверьте замены кода, проверив созданный код. См. раздел Проверка библиотеки замены кода.
Замена кода для матриц - библиотеки замены кода не поддерживают замену функций, имеющих входы переменного размера.
Маркеры в путях к файлам - можно включать маркеры в пути к файлам при указании информации построения для записи замены кода только с помощью интерфейса программирования. Возможность включения маркеров недоступна в средстве замены кода. См. раздел Указание сведений о построении в разделе Определение оптимизации библиотеки замены кода.
Замены операций сложения и вычитания - соответствующие ограничения см. в разделе Замена кода оператора сложения и вычитания.
Выравнивание данных -
Не поддерживается для
Аргументы, связанные со встроенным классом хранения с DataScope установить в значение Exported или импортированный класс встроенного хранилища GetSet
Программное обеспечение в цикле (SIL)
Процессор в контуре (PIL)
Ссылочные параметры модели
Экспортированные функции в диаграммах Stateflow ®
Замененные функции, созданные с помощью управления прототипом функции C или метода шага аргументов ввода-вывода класса C++ и использующие переменные ввода-вывода корневого уровня
Замещенные функции, создаваемые с помощью целевого файла системы AUTOSAR и использующие функции ввода-вывода на корневом уровне или функции межсетевого доступа AUTOSAR
Если существуют следующие условия, генератор кода включает директивы выравнивания данных для переменных ввода-вывода корневого уровня в ert_main.c или ert_main.cpp файл, который он создает:
Компилятор поддерживает выравнивание глобальных переменных
Создание примера основной программы (выберите Параметры конфигурации > Создание примера основной программы)
Создайте повторно используемый интерфейс функции для модели (выберите Параметры конфигурации > Создание кода > Интерфейс > Упаковка интерфейса кода для Reusable function)
Функция использует переменные ввода-вывода корневого уровня, которые передаются как отдельные аргументы (задайте Параметры конфигурации > Генерация кода > Интерфейс > Передача данных ввода-вывода корневого уровня Individual arguments)
Замененная функция использует переменную ввода-вывода корневого уровня
Замененная функция предъявляет требования к выравниванию
Если сгенерированная основная программа примера не используется, правильно выровняйте используемые переменные ввода-вывода корневого уровня.
Если в этом случае не создать пример основной программы, генератор кода не заменит функцию.
Если замена предъявляет требования к выравниванию к аргументам интерфейса общей утилиты, генератор кода не выполняет выравнивание данных. В этих условиях замена не происходит. Замена допускается, если зарегистрированная спецификация типа выравнивания данных поддерживает выравнивание локальных переменных, а замена включает только локальные переменные.
Для Simulink.Bus:
Если зарегистрированные пользователем спецификации выравнивания не поддерживают выравнивание полей структуры, выравнивание Simulink.Bus объекты не поддерживаются, если Simulink.Bus импортируется.
При выравнивании Simulink.Bus объект данных, элементы в объекте шины выровнены по одной границе. Граница является наименьшим общим кратным требованиям к выравниванию для каждого отдельного элемента шины.
При задании выравнивания для функций, возникающих в иерархии ссылок на модель, и при работе нескольких моделей в иерархии с одними и теми же данными функции, самая нижняя модель определяет выравнивание для остальной части иерархии. Если требование выравнивания для функции в модели выше в иерархии не может быть выполнено из-за выравнивания, заданного моделью ниже в иерархии, замена в модели выше не происходит. В некоторых случаях генерируется сообщение об ошибке. Чтобы обойти эту проблему, если общие данные представлены объектом шины или сигнала, вручную задайте свойство выравнивания для общих данных, установив свойство выравнивания для Simulink.Bus или Simulink.Signal объект.
Ваша обязанность - чтить Alignment для создаваемых классов хранилища.
См. раздел Выравнивание данных для замены кода.
coder.replace функция - см. coder.replace для соответствующих ограничений.