Что такое замена кода?

Замена кода является методом, чтобы изменить код, который генерирует генератор кода для функций и операторов, чтобы соответствовать требованиям кода приложения. Для примера можно заменить сгенерированный код, чтобы соответствовать таким требованиям, как:

  • Оптимизация для конкретного окружения во время выполнения, включая, но не ограничиваясь этим, конкретный целевой компьютер.

  • Интегрирование с существующим кодом приложения.

  • Податливость стандарту, такому как AUTOSAR.

  • Изменение поведения кода, например, включение или отключение нефинитной или встроенной поддержки.

  • Требования к коду конкретного приложения или проекта, такие как:

    • Устранение math.h.

    • Устранение системных заголовочных файлов.

    • Устранение вызовов на memcpy или memset.

    • Использование BLAS.

    • Использование определенного BLAS.

Чтобы применить этот метод, сконфигурируйте генератор кода, чтобы применить библиотеку замены кода (CRL) во время генерации кода. По умолчанию генератор кода не применяет библиотеку замены кода. Вы можете выбрать из библиотек, которые MathWorks® предоставляет и что вы создаете и регистрируетесь при помощи Embedded Coder® продукт. Список доступных библиотек зависит от:

  • Установленные пакеты поддержки.

  • Системный целевой файл, язык, стандартная математическая библиотека и строение поставщика устройств.

  • Создали ли вы и зарегистрировали ли вы библиотеки, используя продукт Embedded Coder.

Библиотеки, включающие GNU99 расширения, предназначены для использования с компилятором GCC. Если вы используете одну из этих библиотек с другим компилятором, сгенерированный код может не скомпилироваться.

Библиотеки замещения кода

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

code replacement table содержит один или несколько code replacement entries с каждой записью, представляющей потенциальную замену функции или оператора. Каждая запись преобразует conceptual representation функции или оператора в implementation representation и приоритет.

Компонент записи таблицыОписание
Концептуальное представление

Определяет запись таблицы и содержит критерии соответствия для генератора кода. Состоит из:

  • Имя функции или ключ. Имя функции определяет большинство функций. Для операторов и некоторых функций серия символов, вызываемая клавишей, идентифицирует функцию или оператор. Для примера используйте имя функции 'cos' и ключевые 'RTW_OP_ADD' оператора.

  • Концептуальные аргументы, которые наблюдают именование генератора кода ('y1', 'u1', 'u2',...), с соответствующими типами ввода-вывода (выход или вход) и типами данных.

  • Другие атрибуты, такие как алгоритм, насыщение с фиксированной точкой и режимы округления, которые идентифицируют критерии соответствия для функции или оператора.

Представление реализации

Задает код замены. Состоит из:

  • Имя функции. Для примера, 'cos_dbl' или 'u8_add_u8_u8'.

  • Аргументы реализации с соответствующими типами ввода-вывода (выход или вход) и типами данных.

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

Приоритет

Определяет приоритет входа относительно других записей в таблице. Значение может варьироваться от 0 до 100, причем 0 является наивысшим приоритетом. Если несколько записей имеют одинаковый приоритет, генератор кода использует первое соответствие с этим приоритетом.

Когда генератор кода ищет соответствие в библиотеке замены кода, он создает и заполняет call site object концептуальным представлением функции или оператора. Если соответствие существует, генератор кода использует соответствующий элемент замены кода, заполненный представлением реализации, и использует его для генерации кода.

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

Терминология замещения кода

ТерминОпределение
Попадание кэшаЗапись замены кода для функции или оператора, заданная в указанной библиотеке замены кода, для которой генератор кода находит совпадение.
Промах кэшаКонцептуальное представление функции или оператора, для которого генератор кода не находит совпадение.
Вызов объекта сайта Концептуальное представление функции или оператора, которое генератор кода использует, когда он встречается с узлом вызова для функции или оператора. Генератор кода использует объект, чтобы запросить библиотеку замены кода для соответствия концептуального представления. Если существует соответствие, генератор кода возвращает объект замены кода, полностью заполненный концептуальным представлением, представлением реализации и приоритетом, и использует этот объект для генерации кода замены.
Библиотека замещения кодаОдна или несколько таблиц замещения кода, которые задают специфичные для приложения реализации функций и операторов. Когда настроен на использование библиотеки замены кода, генератор кода использует критерии, определенные в библиотеке, для поиска соответствий. Если совпадение найдено, генератор кода заменяет код, который он генерирует по умолчанию, кодом конкретного приложения, заданным в библиотеке.
Таблица замещения кодаОдна или несколько записей таблицы замещения кода. Предоставляет способ группирования связанных или общих записей для использования в различных библиотеках.
Запись о замене кодаПредставляет потенциальную замену функции или оператора. Отображает концептуальное представление функции или оператора в представление реализации и приоритет.
Концептуальный аргументПредставляет вход или выходной аргумент для заменяемой функции или оператора. Концептуальные аргументы соблюдают соглашения об именовании ('y1', 'u1', 'u2',...) и типы данных, знакомые генератору кода.
Концептуальное представление

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

  • Имя функции или оператора или ключ

  • Концептуальные аргументы с типом, размерностью и сложностью спецификации для входов и выхода

  • Атрибуты, такие как алгоритм и режимы насыщения и округления с фиксированной точкой

Аргумент реализацииПредставляет вход или выходной аргумент для функции замены C или C++. Аргументы реализации наблюдают за спецификациями имени C/C + + и типа данных.
Представление реализации

Задает прототип функции замещения C или C++. Состоит из:

  • Имя функции (для примера, 'cos_dbl' или 'u8_add_u8_u8')

  • Аргументы реализации, задающие тип, типы квалификаторов и сложность для входных и выходных входных параметров функции

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

КлючОпределяет заменяемую функцию или оператор. Имя функции или ключ появляются в концептуальном представлении записи замены кода. Ключевые RTW_OP_ADD определяет оператор сложения.
ПриоритетОпределяет приоритет соответствия для записи замены кода относительно других записей, которые имеют то же имя и тот же список концептуальных аргументов, в библиотеке замены кода. Приоритет может варьироваться от 0 до 100, причем 0 является наивысшим приоритетом. Значение по умолчанию является 100. Если библиотека предоставляет две реализации для функции или оператора, реализация с более высоким приоритетом затеняет ту, которая имеет более низкий приоритет.

Ограничения на замену кода

Замена кода верификации - Возможно, замена кода ведет себя по-другому, чем вы ожидаете. Например, типы данных, которые вы наблюдаете во входе генератора кода, могут не совпадать с тем, что генератор кода использует в качестве промежуточных типов данных во время операции. Проверьте замену кода путем изучения сгенерированного кода.

Замена кода для матриц - Библиотеки замещения кода не поддерживают динамические и символьные матрицы.

Похожие темы