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

Процесс сборки позволяет вам предоставить необязательный пользовательский код в методах hook, которые выполняются в заданных точках генерации кода и выполняют процесс. Можно использовать методы 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, проверить выполнение следующих условий:

  • The STF_make_rtw_hook.m файл находится в MATLAB® путь.

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

  • Функция hook, реализованная в файле, использует прототип функции, описанный в STF_make_rtw_hook.m Function Prototype и аргументы.

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'. The STF_make_rtw_hook функция отправляет соответствующий код со switch оператор.

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

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

  • templateMakefile: Имя файла make-файла шаблона.

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

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

    Например, следующие делают аргументы из поля команды Make

    make_rtw VAR1=0 VAR2=4

    сгенерировать следующее:

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

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

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

Приложения для 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' для очистки статических или глобальных данных, используемых функцией hook, когда ошибка возникает во время генерации кода или процесса сборки.

Примечание

Процесс сборки временно меняет рабочую папку MATLAB на папку сборки для этапов 'before_make', 'after_make', 'exit', и 'error'. Ваши STF_make_rtw_hook.m файл не должен делать неправильные допущения относительно расположения папки сборки. В точке после 'entry' stage, можно получить путь к папке сборки. В следующем примере кода 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

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

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

Похожие темы