Библиотека замещения кода содержит одну или несколько таблиц замещения кода. Каждая таблица содержит одну или несколько записей замещения кода. Каждая запись содержит параметры отображения и ввода. Запись сопоставляет концептуальное представление автоматически сгенерированных функций 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
Создайте запись.
Запись таблицы замещения кода содержит параметры входа и отображение концептуального представления сгенерированной функции с реализацией представления оптимизированной реализации этой функции.
Чтобы создать таблицу замещения кода:
Определите тип функции, которую вы хотите заменить.
Вызовите соответствующую функцию Entry Function, чтобы создать запись в таблице.
Тип функции, которую вы хотите заменить | Функция ввода |
---|---|
Математическая операция | 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).
Тип функции, которую вы хотите заменить | Установите функцию Parameters |
---|---|
Математическая операция, операция BLAS, операция CBLAS, Fixed-Point, Net Slope Fixed-Point, Пользовательская операция | 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
Создайте концептуальное представление.
Концептуальное представление описывает сигнатуру функции, которую вы хотите заменить. Он состоит из имени функции, возвращаемых аргументов и параметров. Возвращаемые аргументы называются выходными аргументами, а параметры - входными параметрами. Задайте каждый концептуальный аргумент с необходимыми свойствами и, в зависимости от типа замены, другие необязательные свойства.
Необходимые свойства:
Name - Определяется как y1.. yn для выходных аргументов и u1.. un для входных параметров
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 | Замена 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
Укажите сведения о сборке.
Укажите сведения о сборке для библиотеки замещения кода. Информация о сборке предоставляет генератору кода файлы, необходимые для выполнения замены функции.
Чтобы задать информацию о сборке:
Задайте параметры сборки в функции Entry Parameters, определенной на шаге 4, или с заданными функциями. Укажите сведения о сборке со следующими свойствами:
Параметр | Описание |
---|---|
Файл заголовка реализации Задайте свойства | Имя файла заголовка, необходимого для замены кода. |
Исходный файл реализации Задайте свойства | Имя исходного файла, необходимого для замены кода. |
Дополнительные файлы заголовков/включить пути Для каждого файла укажите имя файла и путь в вызовах функций | Имя и путь дополнительных заголовочных файлов, необходимых для замены кода. |
Дополнительные исходные файлы/пути Для каждого файла укажите имя файла и путь в вызовах функций | Имя и путь дополнительных исходных файлов, необходимых для замены кода. |
Дополнительные файлы объектов Для каждого файла укажите имя файла и путь в вызовах функций | Имя и путь дополнительных файлов объектов, необходимых для замены кода. |
Дополнительные флаги ссылки Установите свойство entry | Флаги, необходимые линкеру для генерации исполняемого файла для кода замены. |
Дополнительные флаги компиляции Установите свойство entry | Флаги, необходимые компилятору для генерации объектного кода для кода замены. |
Скопируйте файлы в директорию сборки. Установите Если для записи таблицы происходит соответствие, вызов функции Если вы задаете дополнительные файлы заголовков/включают пути или дополнительные исходные файлы/пути, и вы копируете файлы, компилятор и утилиты, такие как | Флаги, копировать ли заголовки, исходные файлы или файлы объектов, которые требуются для генерации кода замены, в папку сборки перед генерацией кода. Если вы задаете файлы с дополнительными файлами заголовка/включая пути или Дополнительные исходные файлы/пути и копируете файлы, компилятор и утилиты, такие как 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()