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

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

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

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

  • Податливость со стандартом, таким как 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'...), с соответствующими типами ввода-вывода (выход или вход) и типы данных.

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

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

Задает заменяющий код. Состоит из:

  • FunctionName . Например, 'cos_dbl' или 'u8_add_u8_u8'.

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

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

Приоритет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заменяющие ограничения кода

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

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

Похожие темы