Файлы Шаблона генерации кода (CGT)

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

  • Генерация пользовательских баннеров (комментирует разделы) в файлах кода. Смотрите Генерируют Пользовательский Файл и Функциональные Баннеры.

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

Файл CGT по умолчанию

Программное обеспечение генерации кода обеспечивает файл CGT по умолчанию, matlabroot/toolbox/rtw/targets/ecoder/ert_code_template.cgt. Основывайте свои пользовательские файлы CGT на файле по умолчанию.

Файловая структура CGT

Файл CGT состоит из одного необходимого раздела и четырех дополнительных разделов:

Раздел вставки кода

(Требуемый) Этот раздел содержит лексемы, которые задают упорядоченное разделение сгенерированного кода во многие разделы (такие как Includes и разделы Defines). Лексемы имеют форму:

%<SectionName>

Например,

%<Includes>

Программное обеспечение генерации кода задает минимальный набор необходимых лексем. Эти лексемы генерируют C или источник C++ или код заголовка. Они - встроенные лексемы (см. Встроенные Лексемы и Разделы). Можно также задать пользовательские лексемы и пользовательские разделы.

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

Лексемы CGT задают высокоуровневую организацию сгенерированного кода. Используя шаблон API кода, можно разделить каждую секцию кода в именованные подразделы, как описано в Подразделах.

В разделе вставки кода можно также вставить C или комментарии C++ между лексемами. Такие комментарии испускают непосредственно в сгенерированный код.

Раздел баннера файла

(Необязательно) Этот раздел содержит комментарии и лексемы, которые вы используете в генерации пользовательского баннера файла.

Функциональный раздел баннера

(Необязательно) Этот раздел содержит комментарии и лексемы для использования в генерации пользовательского функционального баннера.

Разделяемый раздел баннера служебной функции

(Необязательно) Этот раздел содержит комментарии и лексемы для использования в генерации пользовательского разделяемого баннера служебной функции.

Раздел трейлера файла

(Необязательно) Этот раздел содержит комментарии для использования в генерации пользовательского баннера трейлера.

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

Встроенные лексемы и разделы

Следующее извлечение кода показывает необходимый раздел вставки кода файла CGT по умолчанию с необходимыми встроенными лексемами.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Code insertion section (required)
%%   These are required tokens. You can insert comments and other tokens in
%% between them, but do not change their order or remove them.
%%
%<Includes>
%<Defines>
%<Types>
%<Enums>
%<Definitions>
%<Declarations>
%<Functions>

Отметьте следующие требования настройкой файла CGT:

  • Не удаляйте требуемые встроенные лексемы.

  • Встроенные лексемы должны появиться в порядке, показанном, потому что каждый последовательный раздел имеет зависимости от предыдущих разделов.

  • Только одна лексема на строку.

  • Не повторяйте лексемы.

  • Можно добавить пользовательские лексемы и комментарии к разделу вставки кода, пока вы не нарушаете предыдущие требования.

Примечание

Если вы изменяете файл CGT и затем восстанавливаете вашу модель, процесс генерации кода не обеспечивает сборку топ-модели. Чтобы регенерировать код, смотрите Регенерацию Силы Кода Топ-модели (Simulink Coder).

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

Встроенные лексемы CGT и соответствующие секции кода

Лексема и имя раздела

Описание

Includes

Направляющий раздел #include

Defines

Направляющий раздел #define

Types

Раздел typedef. Typedefs может зависеть от ранее заданного типа

Enums

Раздел перечислимых типов

Definitions

Определения данных (например, double x = 3.0;)

Declarations

Объявления данных (например, extern double x;)

Functions

C или функции C++

Подразделы

Можно задать один или несколько именованных подразделов для любого раздела. Некоторые встроенные разделы предопределили подразделы, полученные в итоге в таблице Subsections Defined для Встроенных Разделов.

Примечание

Разделы и подразделы испускают к исходному или заголовочному файлу в порядке, перечисленном в файле CGT.

Используя пользовательскую функцию раздела, можно задать дополнительные разделы. Смотрите Генерируют Пользовательский Раздел.

Подразделы, заданные для встроенных разделов

Раздел

Подразделы

Описание подраздела

Includes

Нет данных

 

Defines

Нет данных

 

Types

IntrinsicTypes

Внутренний раздел typedef. Внутренние типы зависят только от внутреннего C или типов C++.

Types

PrimitiveTypedefs

Примитивный раздел typedef. Примитивный typedef s зависит только от внутреннего C или типов C++ и от typedef s ранее заданный в разделе IntrinsicTypes.

Types

UserTop

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

Types

Typedefs

Раздел typedef. Typedef s может зависеть от ранее заданных типов

Enums

Нет данных

 

Definitions

Нет данных

 

Declarations

Нет данных

 

Functions

 

C или функции C++

Functions

CompilerErrors

Директивы #error

Functions

CompilerWarnings

Директивы #warning

Functions

Documentation

Документация (комментарий) раздел

Functions

UserBottom

Можно поместить любой код в этот раздел.