Библиотека замены кода содержит одну или несколько таблиц замены кода. Каждая таблица содержит одну или несколько записей замены кода. Каждая запись содержит параметры отображения и записи. Запись отображает концептуальное представление автоматически созданной функции MATLAB или Simulink в представление реализации оптимизированной функции C или C++. Параметры ввода описывают дополнительные свойства, которые генератор кода должен иметь во время замены кода.

Чтобы определить библиотеку замены кода, сначала определите таблицы замены кода в файле адаптации. Затем на этапе регистрации создайте библиотеку замены кода, выбрав таблицы для включения в библиотеку. Таблицы замены кода можно определить в интерактивном или программном режиме, используя один и тот же рабочий процесс.
Интерактивный и программный подходы следуют следующим 8 шагам:
Откройте среду.
Создайте таблицу.
Создайте запись.
Создание параметров записи.
Создайте концептуальное представление.
Создайте представление реализации.
Укажите сведения о построении.
Проверка и сохранение.
Откройте среду.
Для интерактивного создания библиотеки замены кода откройте инструмент замены кода (crtool) из командной строки MATLAB с помощью команды:
>> crtool
Создайте таблицу.
Таблица замены кода упорядочивает записи замены кода в группы, которыми проще управлять.
Чтобы создать таблицу замены кода, выполните следующие действия.
В меню crtool выберите Файл > Новая таблица.
На правой панели присвойте таблице имя и нажмите кнопку Применить.
Создайте запись.
Запись таблицы замены кода содержит параметры записи и отображение концептуального представления, которое описывает сгенерированную функцию, на представление реализации, которое описывает оптимизированную реализацию этой функции.
Чтобы создать запись замены кода, используйте один из следующих методов:
На панели инструментов crtool щелкните значок типа записи и выберите тип записи.
В меню crtool выберите File > New entry > entry-type.
Щелкните таблицу правой кнопкой мыши и выберите Создать запись > Тип записи.
Новая запись появится без имени в средней области.
Создание параметров записи.
Параметры ввода определяют требования к оптимизации и построению, которые генератор кода должен соблюдать при замене кода. Эти параметры изменяются и автоматически появляются в различных разделах интерфейса crtool в зависимости от типа замены функции.
Для создания параметров записи:
В раскрывающемся списке Функция (Function) или Операция (Operation) выберите имя функции, которую требуется заменить.
Этот выбор определяет параметры ввода, которые появляются в crtool.
Создайте концептуальное представление.
Концептуальное представление описывает подпись функции, которую требуется заменить. Концептуальное представление состоит из имени функции, возвращаемых аргументов и параметров. Возвращаемые аргументы называются выходными аргументами, а параметры - входными аргументами. Укажите каждый концептуальный аргумент с именем, типом ввода-вывода и, в зависимости от типа замены, другими свойствами, которые отображаются в crtool.
Чтобы определить концептуальное представление, выполните следующие действия.
В подразделе «Концептуальная функция» или «Концептуальная операция» crtool укажите входные и выходные аргументы функции, которую требуется заменить генератором кода.
Создайте представление реализации.
Представление реализации описывает сигнатуру функции замены, определенной в библиотеке замены кода. Представление реализации состоит из имени функции, возвращаемых аргументов и параметров. Укажите каждый аргумент реализации с типом, квалификатором типа и сложностью.
Для определения представления внедрения:
В подразделе «Функция реализации» или «Функция операции» crtool укажите входные и выходные аргументы для оптимизированной функции, определенной в библиотеке замены кода.
Укажите сведения о построении.
Информация о сборке предоставляет генератору кода файлы для замены функции.
Чтобы указать сведения о построении, выполните следующие действия.
В crtool перейдите на вкладку Информация о построении (Build Information), чтобы открыть панель требований к построению. Укажите необходимые сведения о построении в следующих полях:
| Параметр | Описание |
|---|---|
| Файл заголовка реализации | Имя файла заголовка, необходимого для замены кода. |
| Исходный файл реализации | Имя исходного файла, необходимого для замены кода. |
| Дополнительные заголовочные файлы/пути включения | Имя и путь к дополнительным файлам заголовка, необходимым для замены кода. |
| Дополнительные исходные файлы/пути | Имя и путь к дополнительным исходным файлам, необходимым для замены кода. |
| Дополнительные файлы/пути объектов | Имя и путь к дополнительным файлам объектов, необходимым для замены кода. |
| Дополнительные флаги ссылок | Флаги компоновщика, необходимые для создания исполняемого файла для кода замены. |
| Дополнительные флаги компиляции | Флаги, необходимые компилятору для создания объектного кода замены. |
| Копировать файлы в каталог построения | Указывает, следует ли копировать файлы заголовка, источника или объекта, необходимые для создания кода замены, в папку построения перед созданием кода. Если указать файлы с дополнительными заголовками/включить пути или дополнительные исходные файлы/пути и скопировать файлы, компилятор и утилиты, такие как packNGo, могут найти дублированные экземпляры файлов. |
Проверка и сохранение.
Сохраните библиотеку замены кода с тем же именем, что и таблица замены кода в пути MATLAB. Сохранение библиотеки автоматически проверяет непроверенное содержимое.
Чтобы проверить и сохранить библиотеку, выполните следующие действия.
В меню crtool выберите «Файл» > «Сохранить таблицу» > «Сохранить».
Откройте среду.
Чтобы программно создать библиотеку замены кода, откройте файл функции MATLAB. В меню MATLAB выберите Создать (New) > Функция (Function).
Создайте таблицу.
Таблица замены кода упорядочивает записи замены кода в группы, которыми проще управлять.
Чтобы создать таблицу замены кода, выполните следующие действия.
Создайте функцию, которую можно использовать для вызова таблицы библиотеки замены кода. Функция не должна иметь аргументов и возвращать объект таблицы.
Создание объекта таблицы с вызовом RTW.TflTable.
function hTable = code_replacement_library_table() % Create a function to call code replacement library table %% Create a code replacement library table object hTable = RTW.TflTable; end
Создайте запись.
Запись таблицы замещения кода содержит параметры входа и отображение концептуального представления сгенерированной функции в представление реализации оптимизированной реализации этой функции.
Чтобы создать таблицу замены кода, выполните следующие действия.
Укажите тип функции, которую требуется заменить.
Вызовите соответствующую функцию ввода для создания записи в таблице.
| Тип функции, которую требуется заменить | Функция ввода |
|---|---|
| Математическая операция | RTW.TflCOperationEntry |
| Функция | RTW.TflCFunctionEntry |
| Работа BLAS | RTW.TflBlasEntryGenerator |
| Работа CBLAS | RTW.TflCBlasEntryGenerator |
| Операции сложения и вычитания с фиксированной точкой | RTW.TflCOperationEntryGenerator |
| Операция с фиксированной точкой чистого откоса | RTW.TflCOperationEntryGenerator_NetSlope |
| Семафор или мьютекс | RTW.TflCSemaphoreEntry |
| Пользовательская функция | RTW.TflCFunctionEntryML |
| Пользовательская операция | RTW.TflCOperationEntryML |
function hTable = code_replacement_library_table() % Create a function to call code replacement library table %% Create a code replacement library table object hTable = RTW.TflTable; %% Create a code replacement library entry % Pick one from list below hEntry = RTW.TFLCOperationEntry; hEntry = RTW.TflCFunctionEntry; hEntry = RTW.TflBlasEntryGenerator; hEntry = RTW.TflCBlasEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator_NetSlope; hEntry = RTW.TflCSemaphoreEntry; hEntry = RTW.TflCFunctionEntryML; hEntry = RTW.TflCOperationEntryML; end
Создание параметров записи.
Параметры ввода определяют требования к оптимизации и построению, которые генератор кода должен соблюдать при замене кода. Эти параметры зависят от типа замены функции.
Для создания параметров ввода:
Вызовите функцию Set Parameters, соответствующую типу функции, которую требуется заменить, определенной на предыдущем шаге (шаг 3).
| Тип функции, которую требуется заменить | Функция «Задать параметры» |
|---|---|
| Математическая операция, операция BLAS, операция CBLAS, Фиксированная точка, Чистая Наклонная Фиксированная точка, таможенная операция | setTflCOperationEntryParameters |
| Функция, Пользовательская функция | setTflCFunctionEntryParameters |
| Семафор или Мьютекс | setTflCSemaphoreEntryParameters |
Каждая функция Set Parameter отображается со всеми доступными свойствами, для которых установлены значения по умолчанию. Точные свойства и значения, которые необходимо указать, зависят от заменяемой функции. Конкретные сведения о замене см. в примерах.
function hTable = code_replacement_library_table() % Create a function to call code replacement library table %% Create a code replacement library table object hTable = RTW.TflTable; %% Create a code replacement library entry % Pick one from list below hEntry = RTW.TFLCOperationEntry; hEntry = RTW.TflCFunctionEntry; hEntry = RTW.TflBlasEntryGenerator; hEntry = RTW.TflCBlasEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator_NetSlope; hEntry = RTW.TflCSemaphoreEntry; hEntry = RTW.TflCFunctionEntryML; hEntry = RTW.TflCOperationEntryML; %% Create entry parameters % Pick one from list below hEntry.setTflCOperationEntryParameters(... 'Key', ' ', ... 'Priority', 100, ... 'AcceptExprInput', true, ... 'AdditionalHeaderFiles', {}, ... 'AdditionalIncludePaths', {}, ... 'AdditionalLinkObjs', {}, ... 'AdditionalLinkObjsPaths', {}, ... 'AdditionalSourceFiles', {}, ... 'AdditionalSourcePaths', {}, ... 'AdditionalCompileFlags', {}, ... 'AdditionalLinkFlags', {}, ... 'AllowShapeAgnostic', false, ... 'ArrayLayout', 'COLUMN_MAJOR', ... 'EntryInfoAlgorithm', 'RTW_CAST_BEFORE_OP', ... 'GenCallback', ' ', ... 'ImplementationHeaderFile', ' ', ... 'ImplementationHeaderPath', ' ', ... 'ImplementationName', ' ', ... 'ImplementationSourceFile', ' ', ... 'ImplementationSourcePath', ' ', ... 'ImplType', 'FCN_IMPL_FUNCT', ... 'MustHaveZeroNetBias', false, ... 'NetFixedExponet', 0, ... 'NetAdjustmentFactor', 1, ... 'RoundingModes', 'RTW_ROUND_UNSPECIFIED', ... 'SaturationMode', 'RTW_SATURATE_UNSPECIFIED', ... 'SideEffects', false, ... 'SlopesMustBeTheSame', false, ... 'StoreFcnReturnInLocalVar', false); hEntry.setTflCFunctionEntryParameters(... 'Key', ' ', ... 'Priority', 100, ... 'AcceptExprInput', true, ... 'AdditionalHeaderFiles', {}, ... 'AdditionalIncludePaths', {}, ... 'AdditionalLinkObjs', {}, ... 'AdditionalLinkObjsPaths', {}, ... 'AdditionalSourceFiles', {}, ... 'AdditionalSourcePaths', {}, ... 'AdditionalCompileFlags', {}, ... 'AdditionalLinkFlags', {}, ... 'ArrayLayout', 'COLUMN_MAJOR', ... 'EntryInfoAlgorithm', 'RTW_DEFAULT', ... 'GenCallback', ' ', ... 'ImplementationHeaderFile', ' ', ... 'ImplementationHeaderPath', ' ', ... 'ImplementationName', ' ', ... 'ImplementationSourceFile', ' ', ... 'ImplementationSourcePath', ' ', ... 'ImplType', 'FCN_IMPL_FUNCT', ... 'RoundingModes', 'RTW_ROUND_UNSPECIFIED', ... 'SaturationMode', 'RTW_SATURATE_UNSPECIFIED', ... 'SideEffects', false, ... 'StoreFcnReturnInLocalVar', false); hEntry.setTflCSemaphoreEntryParameters(... 'Key', ' ', ... 'Priority', 100, ... 'AcceptExprInput', true, ... 'AdditionalHeaderFiles', {}, ... 'AdditionalIncludePaths', {}, ... 'AdditionalLinkObjs', {}, ... 'AdditionalLinkObjsPaths', {}, ... 'AdditionalSourceFiles', {}, ... 'AdditionalSourcePaths', {}, ... 'AdditionalCompileFlags', {}, ... 'AdditionalLinkFlags', {}, .... 'GenCallback', ' ', ... 'ImplementationHeaderFile', ' ', ... 'ImplementationHeaderPath', ' ', ... 'ImplementationName', ' ', ... 'ImplementationSourceFile', ' ', ... 'ImplementationSourcePath', ' ', ... 'ImplType', 'FCN_IMPL_FUNCT', ... 'RoundingModes', 'RTW_ROUND_UNSPECIFIED', ... 'SaturationMode', 'RTW_SATURATE_UNSPECIFIED', ... 'SideEffects', false, ... 'StoreFcnReturnInLocalVar', false); end
Создайте концептуальное представление.
Концептуальное представление описывает подпись функции, которую требуется заменить. Он состоит из имени функции, возвращаемых аргументов и параметров. Возвращаемые аргументы называются выходными аргументами, а параметры - входными аргументами. Укажите каждый концептуальный аргумент с требуемыми свойствами и, в зависимости от типа замены, другие необязательные свойства.
Обязательные свойства:
Имя - определено как y1.. yn для выходных аргументов и u1.. un для входных аргументов
Тип ввода-вывода - определяется как RTW_IO_OUTPUT или RTW_IO_INPUT
Для определения концептуального представления используйте один из следующих подходов:
| Подход | Функция | Цель |
|---|---|---|
| 1 | createAndAddConceptualArg | Настройка и управление. Если необходимо явно указать аргументы как скаляр или матрицу и другие свойства. |
| 2 | getTflArgFromString | Быстрое прототипирование. Если требуется быстро указать аргументы со встроенными типами данных. |
Подходы программирования показаны со всеми доступными свойствами, установленными на значения по умолчанию. Точные свойства и значения, которые необходимо указать, зависят от заменяемой функции. Конкретные сведения о замене см. в примерах.
function hTable = code_replacement_library_table() % Create a function to call code replacement library table %% Create a code replacement library table object hTable = RTW.TflTable; %% Create a code replacement library entry % Pick one from list below hEntry = RTW.TFLCOperationEntry; hEntry = RTW.TflCFunctionEntry; hEntry = RTW.TflBlasEntryGenerator; hEntry = RTW.TflCBlasEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator_NetSlope; hEntry = RTW.TflCSemaphoreEntry; hEntry = RTW.TflCFunctionEntryML; hEntry = RTW.TflCOperationEntryML; %% Create entry parameters % Pick one from list below % To view properties, see step 4 hEntry.setTflCOperationEntryParameters( ); hEntry.setTflCFunctionEntryParameters( ); hEntry.setTflCSemaphoreEntryParameters( ); %% Create the conceptual representation % Approach 1: createAndAddConceptualArg % arg = createAndAddConceptualArg(hEntry, argType, varargin) % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix' % varargin - 'name', 'value' pairs shown below set to default values, % includes name and I/O type % Define Output Arguments hEntry.createAndAddConceptualArg(... 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'IsSigned', true, ... 'WordLength', 32, ... 'CheckSlope', true, ... 'CheckBias', true, ... 'DataTypeMode', 'Fixed-point:binary point scaling', ... 'DataType', 'Fixed', ... 'Scaling', 'BinaryPoint', ... 'Slope', 1, ... 'SlopeAdjustmentFactor', 1.0, ... 'FixedExponent', -15, ... 'Bias', 0.0, ... 'FractionLength', 15, ... 'BaseType', 'double', ... 'DimRange', [2,2]); % Define Input Arguments hEntry.createAndAddConceptualArg(... 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'IsSigned', true, ... 'WordLength', 32, ... 'CheckSlope', true, ... 'CheckBias', true, ... 'DataTypeMode', 'Fixed-point:binary point scaling', ... 'DataType', 'Fixed', ... 'Scaling', 'BinaryPoint', ... 'Slope', 1, ... 'SlopeAdjustmentFactor', 1.0, ... 'FixedExponent', -15, ... 'Bias', 0.0, ... 'FractionLength', 15, ... 'BaseType', 'double', ... 'DimRange', [2,2]); % Approach 2: getTflArgFromString % arg = getTflArgFromString(hEntry, name, I/O type) % name- y1..yn | u1..un % I/O type- RTW_IO_OUTPUT | RTW_IO_INPUT % Define Output Arguments arg = getTflArgFromString('y1', 'double'); arg.IOType = 'RTW_IO_OUTPUT'; hEntry.addConceptualArg(arg); % Define Input Arguments arg = getTflArgFromString('u1', 'double'); arg.IOType = 'RTW_IO_INPUT'; hEntry.addConceptualArg(arg); end
Создайте представление реализации.
Представление реализации описывает сигнатуру функции замены, определенной библиотекой замены кода. Он состоит из имени функции, возвращаемых аргументов и параметров. Укажите аргументы реализации с типом, квалификатором типа и сложностью. После определения представления реализации добавьте завершенную запись в таблицу замены кода с вызовом функции. addEntry.
Для определения представления внедрения используйте один из следующих подходов:
| Подход | Функция | Цель |
|---|---|---|
| 1 | copyConceptualArgsToImplementation | Идентичные аргументы. Укажите аргументы реализации и концептуальные аргументы имеют одинаковые свойства. |
| 2 | createAndAddImplementationArg
createAndSetCImplementationReturn | Тот же порядок, другие свойства. Укажите аргументы реализации того же порядка, что и концептуальные аргументы, но имеют другие свойства. |
| 3 | getTflArgFromString | Добавить постоянное значение. Укажите аргументы реализации с постоянным значением. |
| 4 | getTflDWorkFromString |
Замена Mutex/Semaphore. Укажите аргументы реализации для функций mutex или semaphore. |
| 5 | createCRLEntry | Создайте запись с одной функцией. Объявите и определите запись таблицы замены кода (концептуальные аргументы и аргументы реализации) в одной функции. |
Подходы к программированию показаны со всеми доступными свойствами, установленными по умолчанию. Точные свойства и значения, которые необходимо указать, зависят от заменяемой функции. Конкретные сведения о замене см. в примерах.
function hTable = code_replacement_library_table() % Create a function to call code replacement library table %% Create a code replacement library table object hTable = RTW.TflTable; %% Create a code replacement library entry % Pick one from list below hEntry = RTW.TFLCOperationEntry; hEntry = RTW.TflCFunctionEntry; hEntry = RTW.TflBlasEntryGenerator; hEntry = RTW.TflCBlasEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator; hEntry = RTW.TflCOperationEntryGenerator_NetSlope; hEntry = RTW.TflCSemaphoreEntry; hEntry = RTW.TflCFunctionEntryML; hEntry = RTW.TflCOperationEntryML; %% Create entry parameters % Pick one from list below % To view properties, see step 4 hEntry.setTflCOperationEntryParameters( ); hEntry.setTflCFunctionEntryParameters( ); hEntry.setTflCSemaphoreEntryParameters( ); %% Create the conceptual representation % Approach 1: createAndAddConceptualArg % arg = createAndAddConceptualArg(hEntry, argType, varargin) % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix' % varargin - 'name', 'value' pairs shown below set to default values, % includes name and I/O type, to view properties, see step 5 % Define Output Arguments hEntry.createAndAddConceptualArg( ); % Define Input Arguments hEntry.createAndAddConceptualArg( ); % Approach 2: getTflArgFromString % arg = getTflArgFromString(hEntry, name, I/O type) % name- y1..yn | u1..un % I/O type- RTW_IO_OUTPUT | RTW_IO_INPUT % Define Output Arguments arg = getTflArgFromString('y1', 'double'); arg.IOType = 'RTW_IO_OUTPUT'; hEntry.addConceptualArg(arg); % Define Input Arguments arg = getTflArgFromString('u1', 'double'); arg.IOType = 'RTW_IO_INPUT'; hEntry.addConceptualArg(arg); %% Create the implementation representation % Approach 1: copyConceptualArgsToImplementation copyConceptualArgsToImplementation(hEntry); % Approach 2: createAndSetCImplementation, createAndSetCImplementationArg % arg = createAndAddImplementation(hEntry, argType,varargin), % arg = createAndSetCImplementationReturn(hEntry, argType,varargin) % argType - 'RTW.TflArgNumeric' | 'RTW.TflArgMatrix' % varargin - 'name', 'value' pairs shown below set to default values, % includes name and I/O type % Define Output Arguments hEntry.createAndSetCImplementationReturn(... 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_Output', ... 'IsSigned', true, ... 'WordLength', 16, ... 'DataTypeMode', 'Fixed-point:binary point scaling', ... 'DataType', 'Fixed', ... 'Scaling', 'BinaryPoint', ... 'Slope', 1.0, ... 'SlopeAdjustmentFactor', 1.0, ... 'FixedExponent', -15, ... 'Bias', 0.0, ... 'FractionLength', 15, ... 'Value', 0); % Define Input Arguments hEntry.createAndAddImplementationArg(... 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_Output', ... 'IsSigned', true, ... 'WordLength', 16, ... 'DataTypeMode', 'Fixed-point:binary point scaling', ... 'DataType', 'Fixed', ... 'Scaling', 'BinaryPoint', ... 'Slope', 1.0, ... 'SlopeAdjustmentFactor', 1.0, ... 'FixedExponent', -15, ... 'Bias', 0.0, ... 'FractionLength', 15, ... 'Value', 0); % Approach 3: getTflArgFromString % arg = getTflArgFromString(hEntry, name, datatype) % name- y1..yn | u1..un, datatype - built-in data type % Define Output arguments arg = getTflArgFromString(hEntry, 'y1', 'double'); arg.IOType = 'RTW_IO_OUTPUT'; hEntry.Implementation.setReturn(arg); % Define Input arguments arg = getTflArgFromString(hEntry, 'u1', 'double', 0); hEntry.Implementation.addArgument(arg); % Approach 4: getTflDWorkFromString % arg = getTflDWorkFromString(hEntry, name, datatype) % Define arguments arg = getTflDWorkFromString('d1', 'void*'); hEntry.addDWorkArg(arg); % Approach 5: createCRLEntry % tableEntry = createCRLEntry(crTable,conceptualSpecification,implementationSpecification) % Define code replacement conceptual and implementation arguments hEntry = createCRLEntry(... hTable, ... 'conceptualSpecification', ... 'implementationSpecification'); %% Add code replacement library entry to table hTable.addEntry(hEntry); end
Укажите сведения о построении.
Укажите сведения о сборке для библиотеки замены кода. Информация о сборке предоставляет генератору кода файлы, необходимые для замены функции.
Чтобы указать сведения о построении, выполните следующие действия.
Укажите параметры сборки в функции Параметры ввода, определенной на шаге 4, или с указанными функциями. Укажите сведения о построении со следующими свойствами:
| Параметр | Описание |
|---|---|
Файл заголовка реализации Задать свойства | Имя файла заголовка, необходимого для замены кода. |
Исходный файл реализации Задать свойства | Имя исходного файла, необходимого для замены кода. |
Дополнительные заголовочные файлы/пути включения Для каждого файла укажите имя файла и путь в вызовах функций. | Имя и путь к дополнительным файлам заголовка, необходимым для замены кода. |
Дополнительные исходные файлы/пути Для каждого файла укажите имя файла и путь в вызовах функций. | Имя и путь к дополнительным исходным файлам, необходимым для замены кода. |
Дополнительные файлы/пути объектов Для каждого файла укажите имя файла и путь в вызовах функций. | Имя и путь к дополнительным файлам объектов, необходимым для замены кода. |
Дополнительные флаги ссылок Задать свойство записи | Флаги компоновщика, необходимые для создания исполняемого файла для кода замены. |
Дополнительные флаги компиляции Задать свойство записи | Флаги, необходимые компилятору для создания объектного кода замены. |
Копировать файлы в каталог построения. Задать свойство Если для записи таблицы возникает совпадение, вызов функции Если вы указываете дополнительные заголовочные файлы/включаете пути или дополнительные исходные файлы/пути и копируете файлы, компилятор и утилиты, такие как | Указывает, следует ли копировать файлы заголовка, источника или объекта, необходимые для создания кода замены, в папку построения перед созданием кода. Если указать файлы с дополнительными заголовками/включить пути или дополнительные исходные файлы/пути и скопировать файлы, компилятор и утилиты, такие как packNGo, могут найти дублированные экземпляры файлов. |
Если в записи используются файлы заголовка, источника или объекта, определите, следует ли сделать файлы доступными для генератора кода. Можно скопировать файлы в папку построения или явно указать имена отдельных файлов и пути к ним.
Если указать дополнительные заголовочные файлы/включить пути или исходные файлы/пути и скопировать файлы, компилятор и утилиты, такие как packNGo может найти дублированные экземпляры файлов (экземпляр в папке построения и экземпляр в исходной папке).
Если вы решили скопировать файлы в папку сборки и используете packNGo для перемещения статических и сгенерированных кодовых файлов в другую среду разработки:
В вызове для packNGo, укажите пару свойство-значение 'minimalHeaders' true (значение по умолчанию). Этот параметр предписывает функции включать в zip-файл минимальные заголовочные файлы, необходимые для создания кода.
Не сопоставлять файлы, которые вы копируете, с файлами, которые вы не копируется. если packNGo функция находит несколько экземпляров одного и того же файла, функция возвращает ошибку.
При использовании интерфейса программирования указанные пути могут включать маркеры. Токен - это переменная, определяемая как символьный вектор, массив ячеек символьных векторов или строковый массив в рабочей области MATLAB ®, заключенной с символами доллара ($variable$). Генератор кода вычисляет и заменяет маркер определенным значением. Например, рассмотрим путь $myfolder$\folder1, где myfolder - символьный вектор или строковая скалярная переменная, определенная в рабочей области MATLAB как 'd:\work\source\module1'. Генератор кода генерирует пользовательский путь как d:\work\source\module1\folder1.
Проверка и сохранение.
Сохраните файл настроек библиотеки замены кода с тем же именем, что и таблица библиотеки замены кода в пути MATLAB.
Чтобы сохранить и проверить библиотеку, выполните следующие действия.
Сохраните файл. В меню MATLAB выберите «Файл» > «Сохранить».
Проверьте библиотеку, вызвав ее из командной строки MATLAB. Например:
>> hTable = code_replacement_library_table()