Что такое индивидуальная настройка замещения кода?

Настройте, как и когда генератор кода заменяет код C/C + +, который он генерирует по умолчанию для функций и операторов путем разработки пользовательской библиотеки замены кода. Вы можете разрабатывать библиотеки в интерактивном режиме с помощью Code Replacement Tool или программно.

  • Разрабатывайте библиотеки с учетом конкретных требований приложений

  • Добавьте идентификаторы в список зарезервированных ключевых слов, которые генератор кода рассматривает во время замены кода

  • Настройте процесс соответствия и замены генератора кода для функций

Чтобы начать, Quick Start Code Replacement Library Development - Simulink ®.

Процесс соответствия и замены замещения кода

Когда генератор кода встречается с узлом вызова для функции или оператора, это:

  1. Создает и частично заполняет объект записи замены кода именем функции или оператора или ключом и концептуальными аргументами.

  2. Использует объект entry, чтобы запросить конфигурированную библиотеку замещения кода для соответствия концептуального представления. Генератор кода выполняет поиск совпадения таблиц в библиотеке замещения кода в том же порядке, в котором они отображаются в библиотеке. При поиске соответствия генератор кода учитывает:

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

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

    • Алгоритм (расчет)

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

    • Приоритет

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

  4. Использует прототип функции замены C или C++ в объекте замены кода, чтобы сгенерировать код.

Ограничения, накладываемые на индивидуальную настройку кода

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

  • Замена кода для матриц - Библиотеки замещения кода не поддерживают замену функций, которые имеют входы переменного размера.

  • Лексемы в путях к файлам - можно включать лексемы в пути к файлам при указании информации о сборке для записи замены кода только при помощи интерфейса программирования. Возможность включать лексемы недоступна с помощью Code Replacement Tool. См. раздел «Задание информации о сборке» в разделе «Определение оптимизации библиотеки замещения кода».

  • Замена операций сложения и вычитания - См. «Замена кода оператора сложения и вычитания» для соответствующих ограничений.

  • Выравнивание данных -

    • Не поддерживается для

      • Аргументы, связанные со встроенным классом памяти с DataScope установлено на Exported или импортированные встроенные классы памяти GetSet

      • Программа в цикле (SIL)

      • Процессор в цикле (PIL)

      • Моделируйте ссылочные параметры

      • Экспортированные функции в Stateflow® чарты

      • Заменены функции, которые сгенерированы управлением прототипом функции C или методом шага аргументов ввода-вывода класса C++ и которые используют переменные ввода-вывода корневого уровня

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

    • Если существуют следующие условия, генератор кода включает директивы выравнивания данных для переменных ввода-вывода корневого уровня в ert_main.c или ert_main.cpp файл, который он создает:

      • Компилятор поддерживает глобальное выравнивание переменных

      • Сгенерируйте пример основной программы (выберите Configuration Parameters > Generate an example main program)

      • Произведите интерфейс функции многократного использования для модели (установите Configuration Parameters> Code Generation> Interface> Code interface packaging к Reusable function)

      • Функция использует переменные ввода - вывода уровня корня, которые переданы в как отдельные аргументы (установите Configuration Parameters> Code Generation> Interface> Pass root-level I/O as к Individual arguments)

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

      • Замененная функция накладывает требования к выравниванию

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

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

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

    • Для Simulink.Bus:

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

      • При выравнивании Simulink.Bus объект данных, элементы объекта шины выровнены на одном контуре. Контур является самым низким общим кратным требованиям к выравниванию для каждого отдельного элемента шины.

    • Когда вы задаете выравнивание для функций, которые происходят в иерархии модели-ссылки, и несколько моделей в иерархии работают на тех же данных функции, самая нижняя модель диктует выравнивание для остальной иерархии. Если потребность в выравнивании для функции в модели выше в иерархии не может быть удовлетворена из-за того, что выравнивание установлено на модель ниже в иерархии, замена в более высокой модели не происходит. В некоторых случаях генерируется сообщение об ошибке. Чтобы обойти эту проблему, если разделяемые данные представлены шиной или объектом сигнала, вручную установите свойство alignment на разделяемых данных, задав свойство alignment Simulink.Bus или Simulink.Signal объект.

    • Это ваша ответственность - чтить Alignment настройка свойства для классов памяти, которые вы создаете.

    Для получения информации о замене кода см. раздел « Выравнивание данных».

  • coder.replace function - См. coder.replace для соответствующих ограничений.

Похожие темы