exponenta event banner

Настройка процесса построения с помощью файла STF_make_rtw_hook

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

STF_make_rtw_hook Файл

Можно изменить методы захвата в файле, который обычно называется STF_make_rtw_hook.m, где STF - имя системного целевого файла, например, ert или mytarget. Этот файл реализует функцию, STF_make_rtw_hook, которая отправляется определенному действию, в зависимости от hookMethod передан аргумент.

Вызовы процесса построения STF_make_rtw_hook, проходящий в hookMethod аргумент и другие аргументы. Реализуются только те методы захвата, которые требуются процессу построения.

Если модель содержит ссылочные модели, можно реализовать STF_make_rtw_hook.m для каждой ссылочной модели по мере необходимости. Процесс построения вызывает каждый STF_make_rtw_hook для ссылочных моделей эти файлы обрабатываются рекурсивно (в порядке зависимости).

Соглашения по использованию файла STF_make_rtw_hook

Чтобы процесс сборки вызвал STF_make_rtw_hook, проверьте выполнение следующих условий:

  • STF_make_rtw_hook.m находится в пути MATLAB ®.

  • Имя файла - это имя системного целевого файла (STF), прилагается к тексту _make_rtw_hook.m. Например, при создании кода с пользовательским системным целевым файлом mytarget.tlc, назовите файл hook mytarget_make_rtw_hook.mи присвойте имя функции hook, реализованной в файле mytarget_make_rtw_hook.

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

STF_make_rtw_hook.m Прототип функции и аргументы

Прототип функции для STF_make_rtw_hook является:

function STF_make_rtw_hook(hookMethod, modelName, rtwRoot, templateMakefile,
buildOpts, buildArgs, buildInfo)

Аргументы определяются как:

  • hookMethod: Символьный вектор, указывающий стадию процесса построения, из которой STF_make_rtw_hook вызывается функция. Следующая блок-схема суммирует процесс построения, выделяя точки захвата. Допустимые значения для hookMethod являются 'entry', 'before_tlc', 'after_tlc', 'before_make', 'after_make', 'exit', и 'error'. STF_make_rtw_hook функция отправляется в соответствующий код с помощью switch заявление.

  • modelNameВектор символов, указывающий имя модели. Действителен на всех этапах процесса построения.

  • rtwRootЗарезервировано.

  • templateMakefile: Имя makefile шаблона.

  • buildOpts: структура MATLAB, содержащая логическое поле; codeWasUpToDate. Действительно для 'before_make', 'after_make', и 'exit' только этапы. buildOpts поля включают:

  • buildArgs: Символьный вектор, содержащий аргумент для make_rtw. При вызове процесса построения buildArgs копируется из следующего аргумента: "make_rtw" в поле Configuration Parameters + Code Generation + Make.

    Например, ниже приведены аргументы из поля Создать команду

    make_rtw VAR1=0 VAR2=4

    создать следующее:

    % make -f untitled.mk VAR1=0 VAR2=4

    buildArgs аргумент не применяется для построений подхода toolchain, поскольку эти построения не позволяют добавлять аргументы make в make_rtw звоните. В командной строке компилятора для предоставления пользовательских определений (например, VAR1=0 VAR2=4), которые применяются как для построения подхода TMF, так и для построения подхода toolchain, используйте поле Configuration Parameters > Code Generation > Custom Code > Defines.

  • buildInfoСтруктура MATLAB, содержащая поля информации о построении модели. Действительно для 'after_tlc', 'before_make', 'after_make', и 'exit' только этапы. Сведения об этих полях и функциях для доступа к ним см. в разделе Настройка процесса построения.

Заявки на STF_make_rtw_hook.m

Вот несколько примеров применения STF_make_rtw_hook.m методы зацепления.

В общем, вы можете использовать 'entry' hook для инициализации процесса построения, например, для изменения или проверки параметров перед созданием кода. Одно приложение для 'entry' hook - повторный запуск сценария автоматической конфигурации, который первоначально выполнялся во время целевого выбора, для сравнения параметров модели до и после выполнения сценария в целях проверки.

Другие точки зацепления, 'before_tlc', 'after_tlc', 'before_make', 'after_make', 'exit', и 'error' полезны для взаимодействия с внешними цепочками инструментов, средствами управления версиями и другими средствами среды.

Например, можно использовать STF_make_rtw_hook.m файл на этапе после 'entry' для получения пути к папке построения. На 'exit' затем можно найти сгенерированные файлы кода в папке сборки и проверить их в системе управления версиями. Вы можете использовать 'error' для очистки статических или глобальных данных, используемых функцией подключения при возникновении ошибки во время создания кода или процесса построения.

Примечание

Процесс сборки временно изменяет рабочую папку MATLAB на папку сборки для этапов 'before_make', 'after_make', 'exit', и 'error'. Ваш STF_make_rtw_hook.m файл не должен делать неверных предположений относительно расположения папки построения. В точке после 'entry' можно получить путь к папке построения. В следующем примере кода MATLAB путь к папке построения возвращается переменной в виде символьного вектора. buildDirPath.

buildDirPath = rtwprivate('get_makertwsettings',gcs,'BuildDirectory');

Примечание

Изменение конфигурации модели в STF_make_rtw_hook.m файл (включая переключение вариантов) может привести к неожиданным результатам при создании кода.

Регенерация кода управления с помощью STF_make_rtw_hook.m

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

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

  • Для принудительной регенерации кода используйте следующий вызов функции из 'entry' крюк:

    rtw.targetNeedsCodeGen('set', true);
  • В крючках от 'before_tlc' через 'exit', buildOpts структура, переданная на крючок, имеет логическое поле codeWasUpToDate. Поле имеет значение true если код модели был обновлен и код не был восстановлен, или false если код не был обновлен и код был восстановлен. Действия захвата можно настроить на основе значения этого поля. Например:

    ...
    case 'before_tlc'
        if buildOpts.codeWasUpToDate
            %Perform hook actions for up to date model
        else
            %Perform hook actions for full code generation
        end
    ...

Использовать STF_make_rtw_hook.m для процедуры сборки

Создание пользовательского STF_make_rtw_hook hook-файл для процедуры сборки, копирование и редактирование примера ert_make_rtw_hook.m файл, который находится в папкеmatlabroot/toolbox/coder/embeddedcoder (открыто), следующим образом:

  1. Копия ert_make_rtw_hook.m в папку в пути MATLAB. Переименуйте его в соответствии с правилами именования, описанными в разделе «Соглашения по использованию файла STF_make_rtw_hook». Например, для использования с целью GRT grt.tlc, переименовать его в grt_make_rtw_hook.m.

  2. Переименование ert_make_rtw_hook в файле для соответствия имени файла.

  3. Реализуйте необходимые крючки, добавляя код к операторам обращения в switch hookMethod заявление.

Метод захвата after_tlc

after_tlc метод hook доступен исключительно для обратной совместимости.

Формат созданного кода во время after_tlc этап не является окончательным форматом.

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