Замена кода - это метод изменения кода, создаваемого генератором кода для функций и операторов в соответствии с требованиями прикладного кода. Например, можно заменить созданный код в соответствии со следующими требованиями:
Оптимизация для конкретной среды выполнения, включая, но не ограничиваясь этим, конкретное целевое оборудование.
Интеграция с существующим кодом приложения.
Соответствие стандарту, например AUTOSAR.
Изменение поведения кода, например, включение или отключение поддержки без подключения или встроенной поддержки.
Требования к прикладным или проектным кодам, например:
Ликвидация math.h.
Исключение системных заголовочных файлов.
Исключение вызовов memcpy или memset.
Использование BLAS.
Использование определенного BLAS.
Чтобы применить этот метод, настройте генератор кода на применение библиотеки замены кода (CRL) во время создания кода. По умолчанию генератор кода не применяет библиотеку замены кода. С помощью продукта Embedded Coder ® можно выбирать библиотеки, которые предоставляет MathWorks ®, а также создавать и регистрировать их. Список доступных библиотек зависит от:
Установленные пакеты поддержки.
Системный целевой файл, язык, стандартная математическая библиотека и конфигурация поставщика устройства.
Создали ли вы и зарегистрировали библиотеки с помощью продукта Embedded Coder.
Библиотеки, содержащие GNU99 расширения, предназначены для использования с компилятором GCC. При использовании одной из этих библиотек с другим компилятором созданный код может не компилироваться.
Библиотека замены кода состоит из одной или нескольких таблиц замены кода, которые определяют специфичные для приложения реализации функций и операторов. Например, библиотека для конкретного встроенного процессора определяет функции и замены операторов, которые оптимизируют сгенерированный код для этого процессора.
Таблица замены кода содержит одну или более записей замены кода, причем каждая запись представляет потенциальную замену для функции или оператора. Каждая запись отображает концептуальное представление функции или оператора на представление реализации и приоритет.

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