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

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

Добавьте информацию о сборке в запись:

  • В интерактивном режиме, при помощи вкладки Build Information в Code Replacement Tool.

  • Программно, при помощи интерфейса программирования MATLAB®.

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

Информация о сборке может включать:

  • Пути и имена файлов для заголовочных файлов

  • Пути и имена файлов для исходных файлов

  • Пути и имена файлов для объектных файлов

  • Скомпилируйте флаги

  • Соедините флаги

Выберите подход для того, чтобы указать информацию сборки

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

СитуацияПодход
Создание заменяющих записей кода впервые.Заменяющий инструмент кода.
Вы использовали Заменяющий Инструмент Кода, чтобы создать записи, для которых применяется информация о сборке.Заменяющий Инструмент кода, чтобы указать информацию сборки быстро.
Записи быстрого прототипирования.Заменяющий Инструмент кода, чтобы сгенерировать, укажите и протестируйте записи быстро.
Разработка записи, чтобы использовать в качестве шаблона или отправной точки для определения подобных записей.Заменяющий Инструмент кода, чтобы сгенерировать код записи, который можно скопировать и изменить.
Изменение существующих отображений.Редактор MATLAB, чтобы обновить интерфейс программирования непосредственно.
  • Если запись использует заголовок, источник или объектные файлы, рассмотрите, сделать ли файлы доступными для генератора кода. Можно скопировать файлы в папку сборки, или можно задать отдельные имена файлов и пути явным образом.

  • Если вы указываете, что дополнительный заголовок регистрирует/включает пути или исходные файлы/пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo могут найти дублирующиеся экземпляры файлов (экземпляр в папке сборки и экземпляр в исходной папке).

  • Если вы принимаете решение скопировать файлы в папку сборки, и вы используете функцию packNGo, чтобы переместить файлы статического и сгенерированного кода к другой среде разработки:

    • В вызове packNGo задайте пару значения свойства 'minimalHeaders' true (значение по умолчанию). Та установка дает функции команду включать минимальные заголовочные файлы, требуемые создавать код в zip-файле.

    • Не располагайте файлы, которые вы копируете с файлами, которые вы не копируете. Если функция packNGo находит несколько экземпляров того же файла, функция возвращает ошибку.

  • Если вы используете интерфейс программирования, пути, которые вы задаете, могут включать лексемы. Лексема является переменной, заданной как вектор символов, массив ячеек из символьных векторов или массив строк в рабочем пространстве MATLAB, которое вы заключаете со знаками доллара ($variable$). Генератор кода оценивает и заменяет лексему на заданное значение. Например, считайте путь $myfolder$\folder1, где myfolder является вектором символов или скалярной переменной строки, заданной в рабочем пространстве MATLAB как 'd:\work\source\module1'. Генератор кода генерирует пользовательский путь как d:\work\source\module1\folder1.

Укажите информацию сборки в интерактивном режиме с заменяющим инструментом кода

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

  1. Определите информацию, которую необходимо указать.

  2. Откройте заменяющий инструмент кода.

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

  4. На правой панели выберите вкладку Build Information.

  5. На вкладке Build Information укажите свою информацию сборки.

    ПараметрЗадать
    Implementation header fileИмя файла и расширение для заголовочного файла генератор кода должны сгенерировать заменяющий код. Например, sin_dbl.h.
    Implementation source file

    Имя файла и расширение для C или исходного файла C++ генератор кода должны сгенерировать заменяющий код. Например, sin_dbl.c.

    Additional header files/include pathsПути и имена файлов для дополнительных заголовочных файлов генератор кода должны сгенерировать заменяющий код. Например, C:\libs\headerFiles и C:\libs\headerFiles\common.h. Этот параметр добавляет -I в строку компиляции в сгенерированном make-файле.
    Additional source files/ pathsПути и имена файлов для дополнительных исходных файлов генератор кода должны сгенерировать заменяющий код. Например, C:\libs\srcFiles и C:\libs\srcFiles\common.c. Этот параметр добавляет -I в строку компиляции в сгенерированном make-файле.
    Additional object files/ pathsПути и имена файлов для дополнительных объектных файлов компоновщик должны создать заменяющий код. Например, C:\libs\objFiles и C:\libs\objFiles\common.obj.
    Additional link flagsФлаги компоновщик должны сгенерировать исполняемый файл для заменяющего кода.
    Additional compile flagsФлаги компилятор должны сгенерировать объектный код для заменяющего кода.
    Copy files to build directoryСкопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Если вы задаете файлы с Additional header files/include paths или Additional source files/ paths, и вы копируете файлы, компилятор и утилиты, такие как packNGo могут найти дублирующиеся экземпляры файлов.
  6. Нажмите Apply.

  7. Выберите вкладку Mapping Information. Прокрутите к нижней части той таблицы и нажмите Validate entry. Инструмент подтверждает изменения, которые вы внесли в запись.

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

Укажите информацию сборки программно

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

  • Изменение записей создается с Заменяющим Инструментом Кода.

  • Тиражирование и затем изменение подобных записей и таблиц.

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

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

  2. Определите что информацию задать.

  3. Укажите свою информацию сборки.

    ЗадатьДействие
    Заголовочный файл реализации

    Используйте одно из следующего:

    Исходный файл реализации

    Установите свойства ImplementationSourceFile и ImplementationSourcePath в вызове setTflCFunctionEntryParameters, setTflCOperationEntryParameters или setTflCSemaphoreEntryParameters. Например:

    setTflCFunctionEntryParameters(hEnt, ...
        'ImplementationHeaderFile', 'sin_dbl.c', ...
        'ImplementationHeaderPath', 'D:/lib/sourceFiles'
        'Key',                      'sin', ...
        'ImplementationName',       'sin_dbl');
    Дополнительный заголовок регистрирует/включает пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalHeaderFile и addAdditionalIncludePath. Например:

    libdir = fullfile('$(MATLAB_ROOT)','..', '..', 'lib');
    
    hEnt = RTW.TflCFunctionEntry;
    
    addAdditionalHeaderFile(hEnt, 'common.h');
    addAdditionalIncludePath(hEnt, fullfile(libdir, 'include'));

    Эти функции добавляют -I в строку компиляции в сгенерированном make-файле.

    Дополнительные исходные файлы/пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalSourceFile и addAdditionalSourcePath. Например:

    libdir = fullfile('$(MATLAB_ROOT)','..', '..', 'lib');
    
    hEnt = RTW.TflCFunctionEntry;
    
    addAdditionalSourceFile(hEnt, 'common.c');
    addAdditionalSourcePath(hEnt, fullfile(libdir, 'src'));

    Эти функции добавляют -I в строку компиляции в сгенерированном make-файле.

    Дополнительные объектные файлы/пути

    Для каждого файла задайте имя файла и путь в вызовах функций addAdditionalLinkObj и addAdditionalLinkObjPath. Например:

    libdir = fullfile('$(MATLAB_ROOT)','..', '..', 'lib');
    
    hEnt = RTW.TflCFunctionEntry;
    
    addAdditionalLinkObj(hEnt, 'sin.o');
    addAdditionalLinkObjPath(hEnt, fullfile(libdir, 'bin'));
    Скомпилируйте флаги

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

    hEnt = RTW.TflCFunctionEntry;
    
    hEnt.AdditionalCompileFlags = {'-Zi -Wall', '-03'};
    
    Соедините флаги

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

    hEnt = RTW.TflCFunctionEntry;
    
    hEnt.AdditionalCompileFlags = {'-MD -Gy', '-T'};
    
    Скопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода

    Используйте одно из следующего:

    Если соответствие происходит для записи таблицы, вызова функциональных копий RTW.copyFileToBuildDir требуемые файлы к папке сборки.

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

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

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

Запись таблицы задает имена исходного и заголовочного файла и пути. Чтобы запросить операцию копии, запись таблицы устанавливает свойство genCallback на 'RTW.copyFileToBuildDir' в вызове функции setTflCOperationEntryParameters. В этом примере заголовочный файл s32_mul.h содержит встроенную функцию, которая вызывает функции блока, содержавшиеся в s32_mul.s. Если соответствие происходит для записи таблицы, функциональный RTW.copyFileToBuildDir копирует заданный источник и заголовочные файлы к папке сборки для использования во время остатка от процесса сборки.

function hTable = make_my_crl_table

hTable = RTW.TflTable;

op_entry = RTW.TflCOperationEntry;
setTflCOperationEntryParameters(op_entry, ...
                'Key',                      'RTW_OP_MUL', ...
                'Priority',                 100, ...
                'SaturationMode',           'RTW_SATURATE_ON_OVERFLOW', ...
                'RoundingModes',            {'RTW_ROUND_UNSPECIFIED'}, ...
                'ImplementationName',       's32_mul_s32_s32_sat', ...
                'ImplementationHeaderFile', 's32_mul.h', ...
                'ImplementationSourceFile', 's32_mul.s', ...
                'ImplementationHeaderPath', {fullfile('$(MATLAB_ROOT)','crl')}, ...
                'ImplementationSourcePath', {fullfile('$(MATLAB_ROOT)','crl')}, ...
                'GenCallback',              'RTW.copyFileToBuildDir');
.
.
.
addEntry(hTable, op_entry);

Следующий пример использует функции addAdditionalHeaderFile, addAdditionalIncludePath, addAdditionalSourceFile, addAdditionalSourcePath, addAdditionalLinkObj и addAdditionalLinkObjPath в дополнение к функции обратного вызова генерации кода RTW.copyFileToBuildDir.

hTable = RTW.TflTable;

% Path to external source, header, and object files
libdir = fullfile('$(MATLAB_ROOT)','..', '..', 'lib');

op_entry = RTW.TflCOperationEntry;
setTflCOperationEntryParameters(op_entry, ...
                'Key',                      'RTW_OP_ADD', ...
                'Priority',                 90, ...
                'SaturationMode',           'RTW_SATURATE_UNSPECIFIED', ...
                'RoundingModes',            {'RTW_ROUND_UNSPECIFIED'}, ...
                'ImplementationName',       's32_add_s32_s32', ...
                'ImplementationHeaderFile', 's32_add_s32_s32.h', ...
                'ImplementationSourceFile', 's32_add_s32_s32.c'...
                'GenCallback',              'RTW.copyFileToBuildDir');

addAdditionalHeaderFile(op_entry, 'all_additions.h');
addAdditionalIncludePath(op_entry, fullfile(libdir, 'include'));
addAdditionalSourceFile(op_entry, 'all_additions.c');
addAdditionalSourcePath(op_entry, fullfile(libdir, 'src'));
addAdditionalLinkObj(op_entry, 'addition.o');
addAdditionalLinkObjPath(op_entry, fullfile(libdir, 'bin'));
.
.
.
addEntry(hTable, op_entry);

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

Похожие темы