Оптимизируйте сгенерированный код путем разработки и пользования заменяющими библиотеками кода - Simulink®

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

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

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

  • Податливость со стандартом, таким как AUTOSAR

  • Модификация поведения кода, такого как включение или отключение неличной или встроенной поддержки

  • Приложение - или специфичные для проекта требования кода, такие как использование BLAS или устранение math.h, системные заголовочные файлы или вызовы memcpy или memset.

Можно сконфигурировать модель, таким образом, что генератор кода пользуется заменяющей библиотекой кода, которую обеспечивает MathWorks®. Если у вас есть лицензия Embedded Coder®, можно разработать собственную заменяющую библиотеку кода в интерактивном режиме с Заменяющим Инструментом Кода или программно.

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

  • Просмотрите заменяющие табличные определения библиотеки кода от Заменяющего Средства просмотра Кода

  • Откройте табличный файл определения библиотеки в редакторе

  • Откройте регистрационный файл библиотеки в редакторе

  • Просмотрите настройку модели

  • Сгенерируйте код

Для получения дополнительной информации смотрите, Задают Заменяющую Оптимизацию Библиотеки Кода и Заменяющую Библиотеку Регистра Кода.

Шаги для разработки заменяющей библиотеки кода

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

  2. Подготовьтесь к заменяющей разработке библиотеки кода (например, идентифицируйте или разработайте модели, чтобы протестировать вашу библиотеку).

  3. Задайте заменяющие отображения кода.

  4. Укажите информацию сборки для заменяющего кода.

  5. Укажите заменяющие отображения кода.

  6. Проверьте замены кода.

  7. Разверните библиотеку.

Для получения дополнительной информации смотрите Заменяющую Разработку Библиотеки Быстрого запуска Кода - Simulink®.

Замена математической функции

Этот пример задает и указывает заменяющие отображения кода для математических функций. Можно задать заменяющие отображения кода для множества функций (см. Код, который Можно Заменить Из Моделей Simulink).

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

Для получения дополнительной информации смотрите Замену Математической функции Кода.

open_system('rtwdemo_crlmath')

Оператор сложения и замена оператора вычитания

В этом примере показано, как задать и указать заменяющие отображения кода для сложения (+) и вычитание (-) операции. При определении записей для операций сложения и операций вычитания, можно задать который из следующих алгоритмов (EntryInfoAlgorithm) ваша реализация библиотечных функций:

  • Бросок перед операцией (CBO) (RTW_CAST_BEFORE_OP), значение по умолчанию

  • Бросок после операции (CAO) (RTW_CAST_AFTER_OP)

1. Откройте модель rtwdemo_crladdsub. Модель показывает, как задать и указать заменяющие отображения кода для скалярного вычитания сложения (-) операции на двух операндах со следующими соединениями встроенных целочисленных типов данных:

  • int8uint8

  • int16uint16

  • int32uint32

CBO, алгоритм по умолчанию, принят.

open_system('rtwdemo_crladdsub')

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

3. Исследуйте различия между CBO и алгоритмами CAO путем открытия модели rtwdemo_crl_cbo_cao. Модель показывает два блока SUM, каждый демонстрирующий одну из настроек алгоритма, чтобы совпадать с соответствующей заменяющей записью кода.

  • Для Cast_before_operation_Sub блокируйтесь, генератор кода вычисляет операцию вычитания в типе данных аккумулятора (int8), который меньше, чем тип входных данных (int16). Это эквивалентно CBO, потому что генератор кода преобразует вход в тип выходных данных прежде, чем вычислить результат.

  • Для Cast_after_operation_Sub блокируйтесь, генератор кода вычисляет операцию вычитания в типе данных аккумулятора (int32), который больше, чем тип входных данных (int16). Это эквивалентно CAO, потому что генератор кода приводит к тому же результату путем вычисления результата без потери области значений или точности прежде, чем преобразовать в тип выходных данных.

open_system('rtwdemo_crl_cbo_cao')

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

Для получения дополнительной информации о замене оператора сложения и оператора вычитания смотрите Замену Оператора сложения и Оператора вычитания Кода. Для получения дополнительной информации об алгоритме сложения и вычитания (EntryInfoAlgorithm) опции, смотрите setTflCOperationEntryParameters.

Оператор умножения и замена оператора деления для встроенных Целых чисел

Этот пример задает и указывает заменяющие отображения кода для скалярного умножения (*) и деление (/) операции. Операции берут два операнда со следующими соединениями встроенных целочисленных типов данных:

  • int8uint8

  • int16uint16

  • int32uint32

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

open_system('rtwdemo_crlmuldiv')

Скалярная замена оператора

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

Поддерживаемые типы включают:

  • один, дважды

  • int8, uint8

  • int16, uint16

  • int32, uint32

  • csingle, cdouble

  • cint8, cuint8

  • cint16, cuint16

  • cint32, cuint32

  • целые числа фиксированной точки

  • смешанные типы (другой тип на каждом входе)

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

Для получения дополнительной информации о скалярной замене оператора, Скалярной Замене Оператора Кода.

CBO, алгоритм по умолчанию для операций сложения и операций вычитания, принят.

open_system('rtwdemo_crlscalarops')

Замена матричного оператора

Этот пример задает и указывает заменяющие отображения кода для операций над матрицей: сложение, вычитание, умножение, перемещение, сопряженное, и Эрмитово.

Поддерживаемые типы включают:

  • single'double'

  • int8uint8

  • int16uint16

  • int32uint32

  • csingle, cdouble

  • cint8, cuint8

  • cint16, cuint16

  • cint32, cuint32

  • целые числа фиксированной точки

  • смешанные типы (другой тип на каждом входе)

Откройте модель rtwdemo_crlmatops, который показывает некоторые из этих замен. Используйте кнопки в нижней части окна модели, чтобы исследовать файлы, которые задают и указывают заменяющие отображения библиотеки кода.

Для получения дополнительной информации о замене матричного оператора смотрите Маленькую Операцию над матрицей к Замене Процессора Кода.

CBO, алгоритм по умолчанию для операций сложения и операций вычитания, принят.

open_system('rtwdemo_crlmatops')

Замена умножения матриц для BLAS

Этот пример задает и указывает заменяющие отображения кода для стандартных подпрограмм базовых подпрограмм линейной алгебры (BLAS) xGEMM и xGEMV. Можно сопоставить следующие операции со стандартной подпрограммой BLAS:

  • Умножение матриц

  • Умножение матриц с транспонирует на сингле или обоих входных параметрах

  • Умножение матриц с операцией Hermitian на сингле или обоих входных параметрах

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

Для получения дополнительной информации о замене умножения матриц для BLAS смотрите Операцию Умножения матриц к MathWorks BLAS Code Replacement.

open_system('rtwdemo_crlblas')

Замена оператора неподвижной точки для основных операторов

Этот пример задает и указывает заменяющие отображения кода для скалярного сложения (+), вычитание (-), умножение (*), и деление (/) операции. Операции берут два операнда с типами данных с фиксированной точкой.

Можно задать замены кода как соответствие:

  • Комбинация масштабирования наклона/смещения на входных параметрах и выходе

  • Комбинация масштабирования двоичной точки на входных параметрах и выходе

  • Относительное масштабирование между входными параметрами и выход

  • То же наклонное значение и нулевое сетевое смещение через входные параметры и выход.

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

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

  • Используя типы данных с фиксированной точкой в модели требует лицензии Fixed-Point Designer™.

Для получения дополнительной информации о замене оператора неподвижной точки кода, смотрите Замену Оператора неподвижной точки Кода.

open_system('rtwdemo_crlfixpt')

Соответствие и заменяющая индивидуальная настройка процесса для функций

Этот пример задает и указывает заменяющие отображения кода для пользовательских записей. Можно создать собственную запись путем разделения на подклассы от RTW.TflCFunctionEntryML или RTW.TflCOperationEntryML. Ваш класс записи должен реализовать do_match метод, который настраивает ваше соответствие с логикой или изменяет совпадающую запись. do_match метод должен иметь фиксированную предварительно установленную подпись.

Откройте модель rtwdemo_crlcustomentry. Модель показывает, как изменить совпадающую запись путем введения констант как дополнительных аргументов функции реализации. DTC1, Trigonometric Function, и Product покажите пользовательскую замену записи кода для:

  • Бросьте операцию, которая демонстрирует, как извлечь дробные длины из типов и передать их в функцию реализации - Out1 = custom_cast(In1, 2, 4).

  • Синус, который демонстрирует, как передать постоянное значение функции реализации - Out2=custom_sin(In2, 1).

  • Операция Multiplication, которая демонстрирует, как вычислить сетевой наклон операции и передачи это в функцию реализации - Out3=custom_multiply_shift_right(In3,In4,3).

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

Для получения дополнительной информации о пользовательских записях смотрите, Настраивают Процесс Соответствия и Замены.

open_system('rtwdemo_crlcustomentry')

Замена функции MATLAB

Этот пример задает и указывает заменяющие отображения кода для функций MATLAB®, заданных в блоке MATLAB function. Функция может быть выбрана для замены путем определения coder.replace в нем. Эта функция поддерживает замену функций MATLAB® со следующим:

  • Один или несколько входных параметров

  • Один или несколько выходных параметров

  • Скалярные и матричные вводы и выводы

Откройте модель rtwdemo_crlcoderreplace. Модель показывает некоторые из этих требований. Поддерживаемые типы включают:

  • single'double'

  • int8uint8

  • int16uint16

  • int32uint32

  • csingle, cdouble

  • cint8, cuint8

  • cint16, cuint16

  • cint32, cuint32

  • Целые числа фиксированной точки

  • Смешанные типы (другой тип на каждом входе)

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

Для получения дополнительной информации о замене функции MATLAB® смотрите coder.replace.

open_system('rtwdemo_crlcoderreplace')

Выравнивание данных для реализаций функции

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

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

  • Задайте возможности выравнивания данных и синтаксис для вашего компилятора. Присоедините AlignmentSpecification возразите против TargetCharacteristics объект ключа реестра задан в вашем rtwTargetInfo.m файл.

Откройте модель rtwdemo_crlalign. Модель показывает три заменяющих сценария выравнивания данных кода:

  • Add - Выравнивание экспортируемых и импортированных сигналов. Можно задать точное значение для выравнивания в диалоговом окне Signal Properties или позволить генератору кода определять лучшее выравнивание на основе использования путем отъезда набора значений выравнивания-1.

  • Product - Выравнивание виртуальных и невиртуальных типов шины. Можно задать точное значение для выравнивания для свойства Alignment Simulink.Bus object или позволить генератору кода определять лучшее выравнивание на основе использования путем отъезда набора свойств Выравнивания-1.

  • EML_MMUL - Выравнивание локальных переменных, глобальных переменных и параметров блоков.

Используйте кнопки в нижней части окна модели, чтобы исследовать файлы, которые задают и указывают заменяющие отображения кода. Обратите внимание на то, что модель сконфигурирована, чтобы использовать GCC, Лязг, MSVC или компилятор MinGW.

Для получения дополнительной информации об определении выравнивания данных для замены кода смотрите Выравнивание Данных для Замены Кода.

open_system('rtwdemo_crlalign')

Заменяющее исследование библиотеки кода и верификация

Этот пример показывает Заменяющее Средство просмотра Кода. Можно использовать Заменяющее Средство просмотра Кода для:

  • Исследуйте который заменяющая библиотека кода использовать

  • Проверьте список таблиц в библиотеке и записей в каждой таблице

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

  • Диагностируйте замену кода промахи

Следующие команды открывают Заменяющее Средство просмотра Кода для заменяющей таблицы crl_tablemuldiv кода:

crl = crl_table_muldiv;
crviewer(crl);
daRoot = DAStudio.Root;
me = daRoot.find('-isa', 'DAStudio.Explorer');

Для получения дополнительной информации о Заменяющем Средстве просмотра Кода смотрите, Проверяют Заменяющую Библиотеку Кода.

Создайте информацию

Для каждой записи в заменяющей таблице кода можно указать информацию сборки, такую как следующее для заменяющих функций:

  • Зависимости от заголовочного файла

  • Зависимости от исходного файла

  • Дополнительный включают пути

  • Дополнительные исходные пути

  • Дополнительные флаги ссылки

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

  • Свойство GenCallback в вызове setTflCFunctionEntryParameters, setTflCOperationEntryParameters, или setTflCSemaphoreEntryParameters.

  • Аргумент genCallback в вызове registerCFunctionEntry, registerCOperationEntry, или registerCSemaphoreEntry.

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

Для получения дополнительной информации об указывании информации сборки смотрите, Указывают информацию сборки в, Задают Заменяющую Оптимизацию Библиотеки Кода.

Зарезервированные идентификаторы

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

Для получения дополнительной информации об определении зарезервированных идентификаторов смотрите Зарезервированные Идентификаторы и Замену Кода.

Удалите заменяющие библиотеки примера кода

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

rmpath(fullfile(matlabroot,'toolbox','rtw','rtwdemos','crl_demo'));
sl_refresh_customizations;

close_system('rtwdemo_crladdsub', 0)
close_system('rtwdemo_crl_cbo_cao', 0)
close_system('rtwdemo_crlmuldiv', 0)
close_system('rtwdemo_crlfixpt', 0)
close_system('rtwdemo_crlmath', 0)
close_system('rtwdemo_crlmatops', 0)
close_system('rtwdemo_crlblas', 0)
close_system('rtwdemo_crlscalarops', 0)
close_system('rtwdemo_crlcustomentry', 0)
close_system('rtwdemo_crlcoderreplace', 0)
close_system('rtwdemo_crlalign', 0)

drawnow;
if exist('h','var') && ishghandle(h)
  close(h);
end

if ~isempty(me)
    me(end).delete;
end

clear h;
clear me;
clear isDaDemoSupported;
clear crl;

rtwdemoclean;