Замена кода является методом, чтобы изменить код, который генерирует генератор кода для функций и операторов, чтобы соответствовать требованиям кода приложения. Для примера можно заменить сгенерированный код, чтобы соответствовать таким требованиям, как:
Оптимизация для конкретного окружения во время выполнения, включая, но не ограничиваясь этим, конкретный целевой компьютер.
Интегрирование с существующим кодом приложения.
Податливость стандарту, такому как 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 и приоритет.
Компонент записи таблицы | Описание |
---|---|
Концептуальное представление | Определяет запись таблицы и содержит критерии соответствия для генератора кода. Состоит из:
|
Представление реализации | Задает код замены. Состоит из:
|
Приоритет | Определяет приоритет входа относительно других записей в таблице. Значение может варьироваться от 0 до 100, причем 0 является наивысшим приоритетом. Если несколько записей имеют одинаковый приоритет, генератор кода использует первое соответствие с этим приоритетом. |
Когда генератор кода ищет соответствие в библиотеке замены кода, он создает и заполняет call site object концептуальным представлением функции или оператора. Если соответствие существует, генератор кода использует соответствующий элемент замены кода, заполненный представлением реализации, и использует его для генерации кода.
Генератор кода выполняет поиск совпадения таблиц в библиотеке замещения кода в том же порядке, в котором они отображаются в библиотеке. Если генератор кода находит несколько совпадений в таблице, приоритет определяет соответствие. Генератор кода использует запись с более высоким приоритетом над подобной записью с более низким приоритетом.
Термин | Определение |
---|---|
Попадание кэша | Запись замены кода для функции или оператора, заданная в указанной библиотеке замены кода, для которой генератор кода находит совпадение. |
Промах кэша | Концептуальное представление функции или оператора, для которого генератор кода не находит соответствие. |
Вызов объекта сайта | Концептуальное представление функции или оператора, которое генератор кода использует, когда он встречается с узлом вызова для функции или оператора. Генератор кода использует объект, чтобы запросить библиотеку замены кода для соответствия концептуального представления. Если существует соответствие, генератор кода возвращает объект замены кода, полностью заполненный концептуальным представлением, представлением реализации и приоритетом, и использует этот объект для генерации кода замены. |
Библиотека замещения кода | Одна или несколько таблиц замещения кода, которые задают специфичные для приложения реализации функций и операторов. Когда настроен на использование библиотеки замены кода, генератор кода использует критерии, определенные в библиотеке, для поиска соответствий. Если совпадение найдено, генератор кода заменяет код, который он генерирует по умолчанию, кодом конкретного приложения, заданным в библиотеке. |
Таблица замещения кода | Одна или несколько записей таблицы замещения кода. Предоставляет способ группирования связанных или общих записей для использования в различных библиотеках. |
Запись о замене кода | Представляет потенциальную замену функции или оператора. Отображает концептуальное представление функции или оператора в представление реализации и приоритет. |
Концептуальный аргумент | Представляет вход или выходной аргумент для заменяемой функции или оператора. Концептуальные аргументы соблюдают соглашения об именовании ('y1' , 'u1' , 'u2' ,...) и типы данных, знакомые генератору кода. |
Концептуальное представление | Представляет критерий соответствия, который генератор кода использует для проверки функций и операторов для замены. Состоит из:
|
Аргумент реализации | Представляет вход или выходной аргумент для функции замены C или C++. Аргументы реализации наблюдают за спецификациями имени C/C + + и типа данных. |
Представление реализации | Задает прототип функции замещения C или C++. Состоит из:
|
Ключ | Определяет заменяемую функцию или оператор. Имя функции или ключ появляются в концептуальном представлении записи замены кода. Ключевые RTW_OP_ADD определяет оператор сложения. |
Приоритет | Определяет приоритет соответствия для записи замены кода относительно других записей, которые имеют то же имя и тот же список концептуальных аргументов, в библиотеке замены кода. Приоритет может варьироваться от 0 до 100, причем 0 является наивысшим приоритетом. Значение по умолчанию является 100. Если библиотека предоставляет две реализации для функции или оператора, реализация с более высоким приоритетом затеняет ту, которая имеет более низкий приоритет. |
Замена кода верификации - Возможно, замена кода ведет себя по-другому, чем вы ожидаете. Например, типы данных, которые вы наблюдаете во входе генератора кода, могут не совпадать с тем, что генератор кода использует в качестве промежуточных типов данных во время операции. Проверьте замену кода путем изучения сгенерированного кода.
Замена кода для матриц - Библиотеки замещения кода не поддерживают динамические и символьные матрицы.