Заменяющая библиотека кода содержит одну или несколько заменяющих таблиц кода. Каждая таблица содержит одну или несколько заменяющих записей кода. Каждая запись содержит параметры отображения и записи. Запись сопоставляет концептуальное представление автоматически сгенерированного MATLAB или функции Simulink к представлению реализации оптимизированного C или функции C++. Параметры записи описывают дополнительные свойства для генератора кода, чтобы соблюдать во время замены кода.
Чтобы задать заменяющую библиотеку кода, сначала задайте заменяющие таблицы кода в файле настройки. Затем во время регистрационного шага создайте заменяющую библиотеку кода путем выбора таблиц, чтобы включать в библиотеку. Можно задать заменяющие таблицы кода оба в интерактивном режиме или программно использование того же потока операций.
Интерактивные и программируемые подходы оба выполняют эти 8 шагов:
Откройте среду.
Составление таблицы.
Создайте запись.
Создайте параметры записи.
Создайте концептуальное представление.
Создайте представление реализации.
Укажите информацию сборки.
Подтвердите и сохраните.
Откройте среду.
Чтобы в интерактивном режиме создать заменяющую библиотеку кода, откройте Code Replacement Tool (crtool) из командной строки MATLAB с командой:
>> crtool
Составление таблицы.
Заменяющая таблица кода организует заменяющие записи кода в группировки, с которыми легче справиться.
Составлять заменяющую таблицу кода:
В crtool меню выберите File> New table.
На правой панели назовите таблицу и нажмите Apply.
Создайте запись.
Заменяющая запись таблицы кода содержит параметры записи и отображение концептуального представления, которое описывает сгенерированную функцию к представлению реализации, которое описывает оптимизированную реализацию этой функции.
Чтобы создать заменяющую запись кода, используйте один из этих методов:
От crtool панели инструментов кликните по значку entry-type выбирание entry-type.
В crtool меню выберите File> New entry> entry-type.
Щелкните правой кнопкой по таблице и выберите New entry> entry-type.
Новая запись появляется без имени в средней панели.
Создайте параметры записи.
Параметры записи задают оптимизацию и создают требования для генератора кода, чтобы соблюдать во время замены кода. Эти параметры варьируются и автоматически появляются в различных разделах интерфейса crtool в зависимости от типа функциональной замены.
Создать параметры записи:
В Function или Operation выпадающий список, выберите имя функции, которое вы хотите заменить.
Этот выбор определяет параметры записи, которые появляются в crtool.
Создайте концептуальное представление.
Концептуальное представление описывает подпись функции, которую вы хотите заменить. Концептуальное представление состоит из имени функции, возвращаемых аргументов и параметров. Возвращаемые аргументы упоминаются как выходные аргументы, и параметры упоминаются как входные параметры. Задайте каждый концептуальный аргумент с именем, типом ввода-вывода, и, в зависимости от типа замены, другие свойства, которые появляются в crtool.
Задавать ваше концептуальное представление:
В Conceptual Function или подразделе Conceptual Operation crtool, задайте аргументы ввода и вывода функции, которую вы хотите, чтобы генератор кода заменил.
Создайте представление реализации.
Представление реализации описывает подпись заменяющей функции, определяемой в заменяющей библиотеке кода. Представление реализации состоит из имени функции, возвращаемых аргументов и параметров. Задайте каждый аргумент реализации с типом, введите спецификатор и сложность.
Задавать ваше представление реализации:
В Implementation Function или подразделе Operation Function crtool, задайте аргументы ввода и вывода для оптимизированной функции, определяемой в заменяющей библиотеке кода.
Укажите информацию сборки.
Информация сборки предоставляет генератору кода файлы, чтобы выполнить функциональную замену.
Указать информацию сборки:
В crtool кликните по вкладке Build Information, чтобы открыть панель Requirements сборки. Укажите необходимую информацию сборки в этих полях:
Параметр | Описание |
---|---|
Заголовочный файл реализации | Имя заголовочного файла необходимо для замены кода. |
Исходный файл реализации | Имя исходного файла необходимо для замены кода. |
Дополнительный заголовок регистрирует/включает пути | Имя или путь дополнительных заголовочных файлов необходимы для замены кода. |
Дополнительные исходные файлы/пути | Имя или путь дополнительных исходных файлов необходимы для замены кода. |
Дополнительные объектные файлы/пути | Имя или путь дополнительных объектных файлов необходимы для замены кода. |
Дополнительные флаги ссылки | Флаги компоновщик должны сгенерировать исполняемый файл для заменяющего кода. |
Дополнительные флаги компиляции | Флаги компилятор должны сгенерировать объектный код для заменяющего кода. |
Скопируйте файлы в каталог сборки | Флаги, скопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Если вы указываете, что файлы с Дополнительным заголовком регистрируют/включают пути или Дополнительные исходные файлы / пути, и вы копируете файлы, компилятор и утилиты, такие как packNGo могут найти дублирующиеся экземпляры файлов. |
Подтвердите и сохраните.
Сохраните свою заменяющую библиотеку кода с тем же именем как ваша заменяющая таблица кода на вашем пути MATLAB. Сохранение автоматически вашей библиотеки подтверждает неподтвержденное содержимое.
Подтвердить и сохранить вашу библиотеку:
В crtool меню выберите File> Save Table> Save.
Откройте среду.
Чтобы программно создать заменяющую библиотеку кода, откройте файл функции 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.TflCFunctionEntry |
Пользовательская операция | 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
Создайте параметры записи.
Параметры записи задают оптимизацию и создают требования для генератора кода, чтобы соблюдать во время замены кода. Эти параметры варьируются в зависимости от типа функциональной замены.
Создать ваши параметры записи:
Вызовите функцию Параметров Набора, которая соответствует типу функции, которую вы хотите заменить идентифицированный на предыдущем шаге (шаг 3).
Тип функции вы хотите заменить | Установите функцию Параметров |
---|---|
Математическая операция, операция BLAS, операция CBLAS, Фиксированная точка, Сетевая Наклонная Фиксированная точка, операция Custom | setTflCOperationEntryParameters |
Функция, Пользовательская функция | setTflCFunctionEntryParameters |
Семафор или взаимное исключение | setTflCSemaphoreEntryParameters |
Каждую функцию Параметра Набора показывают со всем доступным набором свойств их значениям по умолчанию. Точные свойства и значения, которые необходимо задать, зависят от функции, которую вы заменяете. Смотрите примеры для определенных заменяющих деталей.
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.. ООН для входных параметров
I/O type - Заданный как 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 | Замена взаимного исключения/Семафора. Задайте аргументы реализации для взаимного исключения или семафорных функций. |
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
Укажите информацию сборки.
Укажите информацию сборки для своей заменяющей библиотеки кода. Информация сборки предоставляет генератору кода файлы, необходимые, чтобы выполнить функциональную замену.
Указать информацию сборки:
Задайте свои параметры сборки в функции Параметров Записи, которую вы задали на шаге 5. Укажите информацию сборки со следующими свойствами:
Параметр | Описание |
---|---|
Заголовочный файл реализации Установите свойства | Имя заголовочного файла необходимо для замены кода. |
Исходный файл реализации Установите свойства | Имя исходного файла необходимо для замены кода. |
Дополнительный заголовок регистрирует/включает пути Для каждого файла задайте имя файла и путь в вызовах функций | Имя или путь дополнительных заголовочных файлов необходимы для замены кода. |
Дополнительные исходные файлы/пути Для каждого файла задайте имя файла и путь в вызовах функций | Имя или путь дополнительных исходных файлов необходимы для замены кода. |
Дополнительные объектные файлы/пути Для каждого файла задайте имя файла и путь в вызовах функций | Имя или путь дополнительных объектных файлов необходимы для замены кода. |
Дополнительные флаги ссылки Установите свойство | Флаги компоновщик должны сгенерировать исполняемый файл для заменяющего кода. |
Дополнительные флаги компиляции Установите свойство | Флаги компилятор должны сгенерировать объектный код для заменяющего кода. |
Скопируйте файлы в каталог сборки. Установите свойство Если соответствие происходит для записи таблицы, вызова функционального Если вы указываете, что дополнительный заголовок регистрирует/включает пути или дополнительные исходные файлы/пути, и вы копируете файлы, компилятор и утилиты, такие как | Флаги, скопировать ли заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Если вы указываете, что файлы с Дополнительным заголовком регистрируют/включают пути или Дополнительные исходные файлы / пути, и вы копируете файлы, компилятор и утилиты, такие как 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 выберите File> Save.
Подтвердите свою библиотеку путем вызова его из командной строки MATLAB. Например:
>> hTable = code_replacement_library_table()