Настройка шаблонов make-файлов

Чтобы сконфигурировать или настроить шаблон make-файла (TMF), вы должны ознакомиться с тем, как make команда работает и как она обрабатывает make-файл (.mk файл). Вы также должны понять правила сборки make-файлов. Для получения информации по этим темам см. документацию, предоставляемую утилитой make, которую вы используете.

Шаблоны make-файлов и лексем

Шаблон make-файла содержит лексемы. Процесс сборки расширяет лексемы и создает make-файлы:

  • model.mk - Компилирует и связывает код, сгенерированный из компонентов модели.

  • rtwshared.mk - Скомпилирует сгенерированный общий код утилиты.

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

Шаблон лексем make-файла

The make_rtw команда (или другая команда, обеспечиваемая некоторыми целями) направляет процесс генерации model_or_sharedutils.mk. The make_rtw команда обрабатывает TMF, заданный на панели Code Generation диалогового окна Параметры конфигурации. make_rtw копирует TMF, линию за линией, расширяя каждый встречающуюся лексему. Шаблон Make Лексем Expanded by make_rtw приводит список лексем и их расширений.

Эти лексемы используются несколькими способами расширенным make-файлом:

  • Управление условным поведением в файле make. Условия используются для управления списками исходных файлов, именами библиотек, целевым объектом, который будет создан, и другой информацией, связанной со сборкой.

  • Чтобы предоставить определения макросов для компиляции файлов, например, -DINTEGER_CODE=1.

Шаблоны лексем make-файла расширены make_rtw

ЛексемаРасширение
Общее назначение

|>ADDITIONAL_LDFLAGS<|

Флаги Linker автоматически добавляются блоками.

|>ALT_MATLAB_BIN<|

Альтернативный полный путь для MATLAB® исполняемый; значение отличается от значения для MATLAB_BIN лексема, когда полный путь содержит пространства.

|>ALT_MATLAB_ROOT<|

Альтернативный полный путь для установки MATLAB; значение отличается от значения для MATLAB_ROOT лексема, когда полный путь содержит пространства.

|>BUILDARGS<|

Опции переданы в make_rtw. Эта лексема предоставляется так, чтобы содержимое вашего model_or_sharedutils.mk изменение файла при изменении аргументов сборки, таким образом, принудительное обновление модулей при изменении опций сборки.

|>COMBINE_OUTPUT_UPDATE_FCNS<|

True (1), когда вы выбираете параметр конфигурации модели Single output/update function, в противном случае False (0). Используется для определения макроса -DONESTEPFCN=1.

|>COMPILE_FLAGS_OTHER<|

Флаги компилятора в группе, отличной от 'OPTS', 'OPT_OPTS', и 'OPTIMIZATION_FLAGS'. Процесс сборки выдает предупреждение, если |>COMPILE_FLAGS_OTHER<| отсутствует, и применяются следующие условия:

  • Информация о сборке содержит флаг компилятора, которого нет в 'OPTS', 'OPT_OPTS', или 'OPTIMIZATION_FLAGS'.

  • Флаг компилятора отсутствует в файле make-файла шаблона.

|>COMPUTER<|

Тип компьютера. Смотрите computer MATLAB команда.

|>DEFINES_OTHER<|

Определения макросов препроцессора в группе, отличной от 'OPTS', 'OPT_OPTS', 'OPTIMIZATION_FLAGS', и 'Custom'.

Определение макроса препроцессора в 'OPTS', 'OPT_OPTS', 'OPTIMIZATION_FLAGS', или 'Custom' который имеет соответствующую пару переменная/токен в файле make-файла шаблона не расширен в DEFINES_OTHER. Это поведение помогает избежать предоставления повторяющихся определений макросов препроцессора.

Для примера некоторые файлы make-файлов шаблонов содержат следующие операторы:

...
NUMST = |>NUMST<|
...
CPP_REQ_DEFINES1 = ... -DNUMST=$(NUMST) ...
Если файл make шаблона содержит пару переменная/токен NUMST = |>NUMST<| и NUMST является определением макроса препроцессора в buildInfo, тогда процесс сборки не расширяет его в DEFINES_OTHER.

Процесс сборки выдает предупреждение, если |>DEFINES_OTHER<| отсутствует, и применяются следующие условия:

  • Информация о сборке содержит определение макроса препроцессора, которого нет в 'OPTS', 'OPT_OPTS', 'OPTIMIZATION_FLAGS', или 'Custom'.

  • Определение макроса препроцессора, например NUMST, не находится в файле make-файла шаблона.

|>EXPAND_LIBRARY_LOCATION<|

Расположение предварительно скомпилированного файла библиотеки. The TargetPreCompLibLocation параметр конфигурации может переопределить эту настройку. Для примеров смотрите Расположение библиотеки управления и Именование во время сборки.

|>EXPAND_LIBRARY_NAME<|

Имя библиотеки. Для примеров смотрите Расположение библиотеки управления и Именование во время сборки и Изменение Make-файла шаблона для rtwmakecfg.

|>EXPAND_LIBRARY_SUFFIX<|

Суффикс библиотеки. The TargetLibSuffix параметр конфигурации может переопределить эту настройку. Для примеров смотрите Расположение библиотеки управления и Именование во время сборки.

|>EXT_MODE<| (Не требуется для R2018a и последующих заданий файла make-файла шаблона TOOLCHAIN_NAME)

True (1) для включения генерации кода поддержки режима external mode, в противном случае False (0).

|>EXTMODE_TRANSPORT<| (Не требуется для R2018a и последующих заданий файла make-файла шаблона TOOLCHAIN_NAME)

Индекс транспортного механизма (для примера, tcpip, serial) для режима external mode.

|>EXTMODE_STATIC<| (Не требуется для R2018a и последующих заданий файла make-файла шаблона TOOLCHAIN_NAME)

True (1), если для режима external mode выбрано статическое выделение памяти. Ложь (0), если выбрано динамическое выделение памяти.

|>EXTMODE_STATIC_SIZE<| (Не требуется для R2018a и последующих заданий файла make-файла шаблона TOOLCHAIN_NAME)

Размер статического буфера выделения памяти для режима external mode.

|>GENERATE_ERT_S_FUNCTION<|

True (1), когда параметр конфигурации модели Create block установлен в SIL, в противном случае False (0). Используется для управления целевым файлом make сборки.

|>INCLUDE_MDL_TERMINATE_FCN<|

True (1), когда выбран параметр конфигурации <reservedrangesplaceholder1> модели, в противном случае False (0). Используется для определения макроса -DTERMFCN==1.

|>INTEGER_CODE<|

True (1), когда параметр конфигурации модели Support floating-point numbers очищен, в противном случае False (0). INTEGER_CODE является необходимым определением макроса при компиляции исходного кода и используется при выборе предварительно скомпилированных библиотек для связи.

|>MAKEFILE_NAME<|

model_or_sharedutils.mk - имя файла make-файла, созданного из TMF.

|>MAT_FILE<|

True (1), когда выбран параметр конфигурации <reservedrangesplaceholder1> модели, в противном случае False (0). MAT_FILE является необходимым определением макроса при компиляции исходного кода, а также используется для включения кода регистрации в процесс сборки.

|>MATLAB_BIN<|

Расположение исполняемой программы MATLAB.

|>MATLAB_ROOT<|

Путь к месту установки MATLAB.

|>MEM_ALLOC<|

RT_MALLOC или RT_STATIC. Указывает, как должна быть выделена память.

|>MEXEXT<|

Расширение файла MEX. Смотрите mexext MATLAB команда.

|>MODEL_MODULES<|

Дополнительные сгенерированные исходные модули. Например, можно разделить большую модель на два файла, model.c и model1.c. В этом случае эта лексема расширяется до model1.c.

|>MODEL_MODULES_OBJ<|

Имена файлов объектов (.obj), соответствующий дополнительным сгенерированным исходным модулям.

|>MODEL_NAME<|

Имя Simulink® блок, строящаяся в настоящее время.

|>MULTITASKING<|

True (1), если режим решателя является многозадачным, в противном случае False (0).

|>NCSTATES<|

Количество непрерывных состояний.

|>NUMST<|

Количество шагов расчета в модели.

|>RELEASE_VERSION<|

Версия релиза MATLAB.

|>S_FUNCTIONS_LIB<|

Список библиотек S-функций, доступных для связывания.

|>SOLVER<|

Имя исходного файла решателя, например ode3.c.

|>SOLVER_OBJ<|

Объект решателя (.obj) имя файла, например ode3.obj.

|>TARGET_LANG_EXT<|

c когда параметр конфигурации модели Language установлен в C, cpp когда Language установлено на C++. Используется в файле make для управления расширением сгенерированных исходных файлов.

|>TID01EQ<|

True (1), если частоты дискретизации непрерывной задачи и первой дискретной задачи равны, в противном случае False (0).

S-функция и информационная поддержка сборки

Примечание

Для примеров лексем в этом разделе смотрите Изменение шаблона Makefile для rtwmakecfg.

|>START_EXPAND_INCLUDES<|
|>EXPAND_DIR_NAME<|
|>END_EXPAND_INCLUDES<|

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

|>START_EXPAND_LIBRARIES<|
|>EXPAND_LIBRARY_NAME<|
|>END_EXPAND_LIBRARIES<|

Список имен библиотек.

|>START_EXPAND_MODULES<|
|>EXPAND_MODULE_NAME<|
|>END_EXPAND_MODULES<|

Имена библиотечных модулей в |>START_EXPAND_LIBRARIES<| и |>START_PRECOMP_LIBRARIES<| списки библиотек.

|>START_EXPAND_RULES<|
|>EXPAND_DIR_NAME<|
|>END_EXPAND_RULES<|

Правила make-файла.

|>START_PRECOMP_LIBRARIES<|
|>EXPAND_LIBRARY_NAME<|
|>END_PRECOMP_LIBRARIES<|

Список предварительно скомпилированных имен библиотек.

Модель-ссылка

Примечание

Для примеров лексем в этом разделе смотрите Предоставление поддержки ссылок на модели в TMF.

|>MASTER_ANCHOR_DIR<|

Для параллельных сборок, текущая рабочая папка (pwd) на момент запуска сборки.

|>MODELLIB<|

Имя файла библиотеки, сгенерированного для текущей модели.

|>MODELREFS<|

Список моделей, на которые ссылается верхняя часть.

|>MODELREF_LINK_LIBS<|

Список ссылочных библиотек модели, с которыми связана верхняя модель.

|>MODELREF_LINK_RSPFILE_NAME<|

Имя файла ответа, с которым связана верхняя модель. Эта лексема действительна только для окружений сборки, поддерживающих файлы отклика linker. Пример его использования см. в matlabroot/ toolbox/coder/compile/tmf/grt_vcx64.tmf.

|>MODELREF_TARGET_TYPE<|

Тип создаваемого целевого объекта. Возможные значения:

  • NONE: Автономная модель или верхняя часть, ссылающаяся на другие модели

  • RTW: Моделируйте эталонное целевое построение

  • SIM: Модель-ссылка построение целевого объекта симуляции

|>RELATIVE_PATH_TO_ANCHOR<|

Относительный путь от расположения сгенерированного make-файла до рабочей папки MATLAB.

|>START_DIR<|

Папка генерации кода на момент запуска сборки. Эта лексема необходима для параллельных построений.

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

NUMST = |>NUMST<|

расширяется до:

NUMST = 2

В дополнение к вышесказанному make_rtw расширяет лексемы из других источников:

  • Специфичное для цели лексемы, заданное в целевых опциях диалогового окна Параметров конфигурации

  • Структуры в rtwoptions раздел системного целевого файла. Структуры в rtwoptions массив структур, содержащий поле makevariable расширяются.

Следующий пример извлечен из matlabroot/ rtw/c/grt/grt.tlc. Раздел, начинающийся с BEGIN_RTW_OPTIONS содержит код MATLAB, который настраивает rtwoptions. Следующая директива вызывает |>EXT_MODE<| лексема, который будет расширен до 1 (on) или 0 (off), в зависимости от того, как вы устанавливаете опции режима external mode.

rtwoptions(2).makevariable = 'EXT_MODE'

Активируйте утилиту make

Сделать команду

После создания model_or_sharedutils.mk из вашего TMF процесс сборки вызывает make команда. Для вызова makeпроцесс сборки выдает эту команду.

makecommand -f model_or_sharedutils.mk

makecommand определяется MAKECMD макрос в целевом файле системы TMF (см. «Структура шаблона make-файла»). Можно задать дополнительные опции для make при помощи команды model параметра конфигурации Make. (См. разделы «Задание Команда и шаблонов MakeFiles и Make Options».)

Для примера укажите OPT_OPTS=-O2 в командном поле Make приводит к make_rtw чтобы сгенерировать следующую make команда.

makecommand -f model_or_sharedutils.mk OPT_OPTS=-O2

Комментарий в верхней части TMF задает доступное make опции команды. Если эти опции не обеспечивают достаточную гибкость, можно сконфигурировать собственный TMF.

Сделать версии утилиты

Утилита make позволяет управлять почти каждым аспектом создания программы в реальном времени. Существует несколько различных версий make доступно. Генератор кода обеспечивает Фонд свободного программного обеспечения GNU® make для обоих UNIX®[1] и платформы ПК в подпапках для конкретной платформы в

matlabroot/bin

Возможно использование других версий make с генератором кода, хотя рекомендуется использовать GNU Make. Чтобы быть совместимым с генератором кода, проверьте, что ваша версия make поддерживает следующий формат команды.

makecommand -f model_or_sharedutils.mk

Структура шаблона make-файла

TMF имеет несколько разделов, включая следующие:

  • Abstract - Описывает цели make-файла. Вот репрезентативный абстракт из TMF ERT в matlabroot/ toolbox/coder/compile/tmf:

    # Abstract:
    #       Template makefile for building a Windows-based stand-alone embedded
    #       real-time version of Simulink model using generated C code and the
    #          Microsoft Visual C/C++ compiler for x64.
    #
    #       Note that this template is automatically customized by the build 
    #       procedure to create "<model>.mk"
    #
    #       The following defines can be used to modify the behavior of the
    #       build:
    #         OPT_OPTS       - Optimization option. See DEFAULT_OPT_OPTS in
    #                          vctools.mak for default.
    #         OPTS           - User specific options.
    #         CPP_OPTS       - C++ compiler options.
    #         USER_SRCS      - Additional user sources, such as files needed by
    #                          S-functions.
    #         USER_INCLUDES  - Additional include paths
    #                          (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
    #
    #       To enable debugging:
    #         set DEBUG_BUILD = 1, which will trigger OPTS=-Zi (may vary with
    #                               compiler version, see compiler doc) 
    #
    #       This template makefile is designed to be used with a system target
    #       file that contains 'rtwgensettings.BuildDirSuffix' see ert.tlc
  • Macros read by make_rtw section - Определяет макросы, которые говорят make_rtw как обработать TMF. Вот представитель Macros read by make_rtw раздел из TMF GRT в matlabroot/ toolbox/coder/compile/tmf:

    #------------------------ Macros read by make_rtw -----------------------------
    #
    # The following macros are read by the build procedure:
    #
    #  MAKECMD         - This is the command used to invoke the make utility
    #  HOST            - What platform this template makefile is targeted for
    #                    (i.e. PC or UNIX)
    #  BUILD           - Invoke make from the build procedure (yes/no)?
    #  SYS_TARGET_FILE - Name of system target file.
    
    MAKECMD         = nmake
    HOST            = PC
    BUILD           = yes
    SYS_TARGET_FILE = any
    BUILD_SUCCESS	= ^#^#^# Created
    
    # Opt in to simplified format by specifying compatible Toolchain
    TOOLCHAIN_NAME = [\
        "Microsoft Visual C++ 2019 v16.0 | nmake (64-bit Windows)", \
        "Microsoft Visual C++ 2017 v15.0 | nmake (64-bit Windows)", \
        "Microsoft Visual C++ 2015 v14.0 | nmake (64-bit Windows)"]
    

    Макросы в этом разделе могут включать:

    • MAKECMD - Задает команду, используемую для вызова утилиты make. Для примера, если MAKECMD = mymake, затем make вызывается команда

      mymake -f model_or_sharedutils.mk

    • HOST - определяет платформу, на которую нацелен этот TMF. Это может быть PC, UNIX, computer_name (см. MATLAB computer команда), или ANY.

    • BUILD - Инструкции make_rtw должен ли он ссылаться или нет make из процедуры сборки. Задайте yes или no.

    • SYS_TARGET_FILE - Задает имя системного целевого файла или значение any. Это используется для проверки непротиворечивости по make_rtw для проверки целевого системного файла, заданного на панели Target selection панели Code Generation диалогового окна Параметры конфигурации. Если вы задаете anyможно использовать TMF с любым системным целевым файлом.

    • BUILD_SUCCESS - Когда make-файл создает статическую библиотеку, он создает BUILD_SUCCESS строка, заданная, например, этим правилом в ert_vcx64.tmf:

      $(PRODUCT) : $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS)
      	@cmd /C "echo ### Linking ..."
      	$(LD) $(LDFLAGS) $(LIBS) \
          @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) -dll -def:$(MODEL).def -out:$@
      	@cmd /C "echo $(BUILD_SUCCESS) dynamically linked library  $(PRODUCT)"
      

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

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

  • Tokens expanded by make_rtw section - Определяет лексемы, которые make_rtw расширяется. Вот краткий отрывок от представителя Tokens expanded by make_rtw раздел от ERT TMFs в matlabroot/ toolbox/coder/compile/tmf/:

    #---------------------- Tokens expanded by make_rtw ----------------------------
    #
    # The following tokens, when wrapped with "|>" and "<|" are expanded by the
    # build procedure.
    #
    #  MODEL_NAME          - Name of the Simulink block diagram
    #  MODEL_MODULES       - Any additional generated source modules
    #  MAKEFILE_NAME       - Name of makefile created from template makefile <model>.mk
    #  MATLAB_ROOT         - Path to where MATLAB is installed.
    ...
    
    MODEL                   = |>MODEL_NAME<|
    MODULES                 = |>MODEL_MODULES<|
    PRODUCT                 = |>PRODUCT<|
    MAKEFILE                = |>MAKEFILE_NAME<|
    MATLAB_ROOT             = |>MATLAB_ROOT<|
    ...

    Дополнительные сведения о лексемах TMF см. в разделах Шаблон make-файла Лексемах Развернутый по make_rtw.

  • Последующие разделы варьируются в зависимости от компилятора, хоста и цели. Некоторые общие разделы включают Model and reference models, External mode, Tool Specifications или Tool Definitions, Include Path, C Flags, Additional Libraries, и Source Files.

  • Rules Раздел - Содержит правила создания, используемые при создании исполняемого файла из сгенерированного исходного кода. Правила сборки обычно характерны для вашей версии make. The Rules за разделом могут следовать связанные разделы, такие как Dependencies.

Настройка и создание шаблонов make-файлов

Введение

В этом разделе описывается механика настройки пользовательского шаблона make-файла (TMF) и включения его в процесс сборки. В нем также рассматриваются методы модификации TMF и ФАЙЛА MATLAB механизмов, связанных с TMF.

Перед созданием пользовательского TMF необходимо прочитать Соглашения о именовании папок и файлов, чтобы понять структуру папок и требования к пути MATLAB для пользовательских целей.

Настройка шаблона make-файла

Чтобы настроить или создать новый TMF, скопируйте существующий GRT или ERT TMF из matlabroot/toolbox/coder/compile/tmf.

Поместите копию в ту же папку, что и связанный системный целевой файл. Обычно это mytarget/mytarget папка в структуре целевой папки. Затем переименуйте свой TMF (для примера, mytarget.tmf) и измените его.

Чтобы позволить процессу сборки найти и выбрать ваш TMF, вы должны предоставить информацию в системном заголовке файла целевого файла (см. System Target File Structure). Для цели, которая реализует один TMF, стандартным способом определения TMF, который будет использоваться в процессе сборки, является использование директивы TMF заголовка файла целевого системного файла.

TMF: mytarget.tmf

Использование макросов и шаблонов, соответствующих выражениям в шаблоне make-файла

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

Делайте служебные процессы model_or_sharedutils.mk и генерирует набор команд на основе правил зависимостей, определенных в model_or_sharedutils.mk. После make генерирует набор команд для создания или перестроения test, make выполняет их.

Например, чтобы создать программу под названием test, make необходимо связать файлы объектов. Однако, если файлы объектов не существуют или устарели, make необходимо скомпилировать исходный код. Таким образом, существует зависимость между исходным и объектным файлами.

Каждая версия make немного отличается своими функциями и тем, как заданы правила. Например, рассмотрим программу, называемую test который создается из двух источников, file1.c и file2.c. Использование большинства версий make, правила зависимости были бы

test: file1.o file2.o
        cc -o test file1.o file2.o

file1.o: file1.c
        cc -c file1.c

file2.o: file2.c
        cc -c file2.c

В этом примере UNIX[2] окружение принято. В среде ПК расширения файлов и команды compile и link отличаются.

При обработке первого правила

test: file1.o file2.o

make видит, что строить test, он должен построить file1.o и file2.o. Как создать file1.o, make обрабатывает правило

file1.o: file1.c

Если file1.o не существует, или если file1.o старше file1.c, make компилирует file1.c.

Формат TMF следует вышеописанному примеру. Наши TMF используют дополнительные функции make такие как макросы и выражения, соответствующие шаблону файла. В большинстве версий make, макрос задан как

MACRO_NAME = value

Ссылки на макросы делаются с помощью $(MACRO_NAME). Когда make видит эту форму выражения, она заменяет value для $(MACRO_NAME).

Можно использовать выражения соответствия шаблона, чтобы сделать правила зависимостей более общими. Для примера использование GNU[3] Сделайте, вы можете заменить два "file1.o: file1.c«и» file2.o: file2.c"правила с одним правилом

%.o : %.c
        cc -c $<

Обратите внимание, что $< в предыдущем примере является специальным макросом, который приравнивается к файлу зависимостей (то есть file1.c или file2.c). Таким образом, используя макросы и "%"символ соответствия шаблона, предыдущий пример может быть сокращен до

SRCS = file1.c file2.c
OBJS = $(SRCS:.c=.o)

test: $(OBJS)
        cc -o $@ $(OBJS)

%.o : %.c
        cc -c $<

Обратите внимание, что $@ макрос выше является другим специальным макросом, который приравнивается к имени текущего целевого объекта зависимостей, в этом случае test.

Этот пример генерирует список объектов (OBJS) из списка источников (SRCS) с помощью функции подстановки текста для макро-расширения. Он заменяет расширение исходного файла (для примера, .c) с расширением файла объекта (.o). Этот пример также обобщил правило сборки для программы, test, для использования специального "$@"макрос.

Настройка сгенерированных make-файлов с rtwmakecfg

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

  • Исходные папки

  • Включить папки

  • Имена библиотек во время выполнения

  • Объекты модуля во время выполнения

S-функции могут добавить эту информацию в make-файл при помощи rtwmakecfg.m Файл функция. Эта функция особенно полезна при построении модели, которая содержит один или несколько ваших блоков S-Function, таких как блоки драйверов устройств.

Чтобы добавить информацию, относящуюся к S-функции, в make-файл,

  1. Создайте функцию rtwmakecfg в файловой rtwmakecfg.m. Генератор кода связывает этот файл с вашей S-функцией на основе расположения его папки.

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

После фазы TLC процесса сборки, при генерации make-файла из TMF, процесс сборки ищет rtwmakecfg.m файл в папке, содержащей компонент S-функции. Если он находит файл, процесс сборки вызывает rtwmakecfg функция. Для получения дополнительной информации смотрите Использовать rtwmakecfg.m API для настройки сгенерированных make-файлов.

Поддержка непрерывного времени в пользовательских целях

Если вы хотите, чтобы ваша пользовательская целевая система на основе ERT поддерживала непрерывное время, необходимо обновить файл make-файла (TMF) шаблона и статический основной программный модуль (для примера, mytarget_main.c) для вашей цели.

Изменения шаблона make-файла.  Добавьте NCSTATES расширение токена после NUMST расширение токена следующим образом:

NUMST = |>NUMST<|
NCSTATES = |>NCSTATES<|

В сложение добавить NCSTATES на CPP_REQ_DEFINES макрос, как в следующем примере:

CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DNUMST=$(NUMST) -DNCSTATES=$(NCSTATES) \
-DMAT_FILE=$(MAT_FILE)
-DINTEGER_CODE=$(INTEGER_CODE) \
-DONESTEPFCN=$(ONESTEPFCN) -DTERMFCN=$(TERMFCN) \
-DHAVESTDIO
-DMULTI_INSTANCE_CODE=$(MULTI_INSTANCE_CODE) \

Изменения основного программного модуля.  Основной программный модуль задает статическую главную функцию, которая управляет планированием задач для поддерживаемых режимов постановки одно- и многоскоростных моделей. NUMST (количество шагов расчета в модели) определяет, вызывает ли основная функция многократный или односкоростной код. Однако, когда модель использует непрерывное время, не полагайтесь на NUMST непосредственно.

Когда у модели есть непрерывное время и флаг TID01EQ верно, и непрерывное время, и самое быстрое дискретное время рассматриваются как одна скорость в сгенерированном коде. Код, сопоставленный с самой быстрой дискретной скоростью, охраняется основной проверкой временного шага. Когда модель имеет только две скорости, и TID01EQ true, сгенерированный код имеет односкоростной интерфейс вызова.

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

  1. Перед NUMST ссылается в файле, добавьте следующий код:

    #if defined(TID01EQ) && TID01EQ == 1 && NCSTATES == 0
    #define DISC_NUMST (NUMST - 1)
    #else
    #define DISC_NUMST NUMST
    #endif
  2. Замените образцы NUMST в файле по DISC_NUMST.

Модель-ссылка Факторов

Смотрите Support Model Referencing для получения важной информации об изменениях TMF, которые вы, возможно, должны будете сделать, чтобы поддержать функции ссылки на модели генератора кода.

Примечание

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

Ошибка тайм-аута при создании общего служебного кода с пользовательским шаблоном make-файла

Если процесс сборки использует пользовательский файл make-файла шаблона для создания файла make-файла для общего кода утилиты, процесс сборки создает ошибку timeout, когда применяются все эти условия:

  • Параметр конфигурации GenCodeOnly является 'off'.

  • The BUILD_SUCCESS сообщение выводится во время make вызов rtwshared.mk.

  • The make вызов rtwshared.mk не обновляет конечный продукт (обычно rtwshared.lib).

Чтобы избежать ошибки, обновите пользовательский шаблон make-файла так, чтобы make вызов генерирует BUILD_SUCCESS сообщение только, когда конечный продукт сгенерирован (как идентифицировано make переменная PRODUCT). Кроме того, если процесс сборки не использует сгенерированный make-файл, отключите генерацию make-файла, установив параметр конфигурации GenerateMakefile на 'off'.

Похожие темы


[1] UNIX является зарегистрированным товарным знаком The Open Group в США и других странах.

[2] UNIX является зарегистрированным товарным знаком The Open Group в США и других странах.

[3] GNU является зарегистрированным товарным знаком Фонда свободного программного обеспечения.