exponenta event banner

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

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

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

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

  • Соответствие стандарту, например AUTOSAR.

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

  • Требования к прикладным или проектным кодам, например:

    • Ликвидация math.h.

    • Исключение системных заголовочных файлов.

    • Исключение вызовов memcpy или memset.

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

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

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

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

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

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

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

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

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

Таблица замены кода содержит одну или более записей замены кода, причем каждая запись представляет потенциальную замену для функции или оператора. Каждая запись отображает концептуальное представление функции или оператора на представление реализации и приоритет.

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

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

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

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

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

Представление осуществления

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

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

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

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

Приоритет

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

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

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

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

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

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

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

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

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

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

Указывает прототип замещающей функции C или C++. Состоит из:

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

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

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

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

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

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

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

Связанные темы