Можно использовать Simulink® Legacy Code Tool, чтобы сгенерировать полностью встроенные S-функции MEX C для наследия или пользовательского кода. S-функции оптимизированы для встроенных компонентов, таких как драйверы устройств и интерполяционные таблицы, и они вызывают существующий C или функции C++.
Legacy Code Tool может взаимодействовать через интерфейс с функциями C++, но не объектами C++. Чтобы работать вокруг этой проблемы так, чтобы инструмент мог взаимодействовать через интерфейс с объектами C++, смотрите Ограничения Legacy Code Tool (Simulink).
Можно использовать инструмент для:
Если вы хотите включать эти типы S-функций в моделях, для которых вы намереваетесь сгенерировать код, использовать инструмент, чтобы сгенерировать файл блока TLC. Файл блока TLC задает, как сгенерированный код для модели вызывает существующий C или функцию C++.
Если S-функция зависит от файлов в папках кроме папки, содержащей S-функцию динамически загружаемый исполняемый файл, используйте инструмент, чтобы сгенерировать sFunction
_makecfg.m
или rtwmakecfg.m
файл для S-функции. Генерация файла обеспечивает те зависимости, когда вы создаете модель, которая включает S-функцию. Например, для некоторых приложений, таких как пользовательские цели, вы можете хотеть определить местоположение файлов в целевом месте. Процесс сборки ищет sFunction
_makecfg.m
или rtwmakecfg.m
в той же папке как S-функция динамически загружаемый исполняемый файл и вызывает функцию в файле.
Для получения дополнительной информации смотрите, Интегрируют Функции C Используя Legacy Code Tool (Simulink).
В зависимости от требований генерации кода вашего приложения, чтобы сгенерировать код для модели, которая использует S-функцию, делают любое из следующего:
Сгенерируйте один .cpp
файл для встроенной S-функции. В структуре данных Legacy Code Tool, установленной значение Options.singleCPPMexFile
поле к true
прежде, чем сгенерировать исходный файл S-функции от вашей существующей функции C. Например:
def.Options.singleCPPMexFile = true; legacy_code('sfcn_cmex_generate', def);
Сгенерируйте исходный файл и файл блока TLC для встроенной S-функции. Например:
def.Options.singleCPPMexFile = false; legacy_code('sfcn_cmex_generate', def); legacy_code('sfcn_tlc_generate', def);
Вы не можете установить singleCPPMexFile
поле к true
если
Options.language='C++'
Вы используете один из следующих объектов Simulink с IsAlias
набор свойств к true
:
Simulink.Bus
Simulink.AliasType
Simulink.NumericType
Спецификация функции Legacy Code Tool включает void*
или void**
представлять скалярные данные о работе для аргумента состояния
HeaderFiles
поле структуры Legacy Code Tool задает несколько заголовочных файлов
Применять параметры конфигурации модели для стиля кода к устаревшей функции:
Инициализируйте структуру данных Legacy Code Tool. Например:
def = legacy_code('initialize');
В структуре данных, установленной значение Options.singleCPPMexFile
поле к true
. Например:
def.Options.singleCPPMexFile = true;
Проверять установку, введите:
def.Options.singleCPPMexFile
Вы не можете установить singleCPPMexFile
поле к true
если
Options.language='C++'
Вы используете один из следующих объектов Simulink с IsAlias
набор свойств к true
:
Simulink.Bus
Simulink.AliasType
Simulink.NumericType
Спецификация функции Legacy Code Tool включает void*
или void**
представлять скалярные данные о работе для аргумента состояния
HeaderFiles
поле структуры Legacy Code Tool задает несколько заголовочных файлов
По умолчанию Legacy Code Tool принимает, что файлы, от которых зависит S-функция, находятся в той же папке как динамически загружаемый исполняемый файл для S-функции. Если ваша S-функция зависит от файлов, которые находятся в другом месте, и вы используете процесс сборки make-файла шаблона, генерируете sFunction
_makecfg.m
или rtwmakecfg.m
файл для S-функции. Например, вы можете сгенерировать этот файл, если ваша структура данных Legacy Code Tool задает ресурсы компиляции как пути.
Сгенерировать sFunction
_makecfg.m
или rtwmakecfg.m
файл, вызовите legacy_code
функция с 'sfcn_makecfg_generate'
или 'rtwmakecfg_generate'
в качестве первого аргумента и имени структуры данных Legacy Code Tool в качестве второго аргумента. Например:
legacy_code('sfcn_makecfg_generate', lct_spec);
Если вы используете несколько регистрационных файлов в той же папке и генерируете S-функцию для каждого файла с одним вызовом legacy_code
, вызов legacy_code
это задает 'sfcn_makecfg_generate'
или 'rtwmakecfg_generate'
должно быть характерно для всех регистрационных файлов. Для получения дополнительной информации смотрите Обработку Нескольких Регистрационных Файлов (Simulink).
Например, если вы задаете defs
как массив структур Legacy Code Tool, вы вызываете legacy_code
с 'sfcn_makecfg_generate'
однажды.
defs = [defs1(:);defs2(:);defs3(:)]; legacy_code('sfcn_makecfg_generate', defs);
Для получения дополнительной информации смотрите Поддержку Сборки S-функций (Simulink Coder).
Можно развернуть S-функции, которые вы генерируете с Legacy Code Tool так, чтобы другие люди могли использовать их. Чтобы развернуть S-функцию для симуляции и генерации кода, совместно используйте следующие файлы:
Регистрационный файл
Скомпилированный динамически загружаемый исполняемый файл
Файл блока TLC
sFunction
_makecfg.m
или rtwmakecfg.m
файл
Заголовок, источник, и включают файлы, от которых зависит сгенерированная S-функция
Когда вы используете эти развернутые файлы:
Перед использованием развернутых файлов в модели Simulink добавьте папку, которая содержит S-файлы-функции к пути MATLAB®.
Если структура данных Legacy Code Tool регистрирует требуемые файлы как абсолютные пути и местоположение изменений файлов, регенерируйте sFunction
_makecfg.m
или rtwmakecfg.m
файл.
Legacy Code Tool может взаимодействовать через интерфейс с функциями C++, но не объектами C++. Используя предыдущий пример как начальная точка, вот пример того, как можно работать вокруг этого ограничения.
Измените определение класса для adder
в новом файле adder_cpp.hpp
. Добавьте три новых макросов, которые динамически выделяют новый adder
возразите, вызовите метод add_one()
, и освободите выделенную память. Каждый макрос берет указатель на adder
объект. Поскольку каждая функция, вызванная Legacy Code Tool, должна иметь подобную C подпись, указатель кэшируется и передается как void*
. Затем необходимо явным образом бросить к adder*
в макросе. Новое определение класса для adder
:
#ifndef _ADDER_CPP_ #define _ADDER_CPP_ class adder { private: int int_state; public: adder(): int_state(0) {}; int add_one(int increment); int get_val() {return int_state;}; }; // Method wrappers implemented as macros #define createAdder(work1) \ *(work1) = new adder #define deleteAdder(work1) \ delete(static_cast<adder*>(*(work1))) #define adderOutput(work1, u1) \ (static_cast<adder*> ((work1)))->add_one(u1) #endif /* _ADDER_CPP_ */
Обновите adder_cpp.cpp
. С модификацией класса, вместо одного глобального экземпляра, каждая сгенерированная S-функция управляет своим собственным adder
объект.
#include "adder_cpp.hpp" int adder::add_one(int increment) { int_state += increment; return int_state; }
Обновите rtwdemo_sfun_adder_cpp.cpp
со следующими изменениями:
StartFcnSpec
вызывает макрос, который выделяет новый adder
возразите и кэширует указатель.
def.StartFcnSpec = 'createAdder(void **work1)';
OutputFcnSpec
вызывает макрос, который вызывает метод add_one()
и обеспечивает определенный adder
S-function объект указателя.
def.OutputFcnSpec = 'int32 y1 = adderOutput(void *work1, int32 u1)';
TerminateFcnSpec
вызывает макрос, который освобождает память.
def.TerminateFcnSpec = 'deleteAdder(void **work1)';
В этом примере показано, как использовать Legacy Code Tool, чтобы интегрировать наследие C функции, которые передают их входные параметры значением по сравнению с адресом.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототипы устаревших функций, названных в этом примере:
FLT filterV1 (const сигнал FLT, const FLT prevSignal, const усиление FLT)
FLT filterV2 (const FLT* сигнал, const FLT prevSignal, const усиление FLT)
FLT является определением типа, чтобы плавать. Устаревший исходный код находится в файлах your_types.h, myfilter.h, filterV1.c, и filterV2.c.
Отметьте различие в OutputFcnSpec, заданном в этих двух структурах; первый случай указывает, что первый входной параметр передается значением, в то время как второй случай задает передачу указателем.
defs = []; % rtwdemo_sfun_filterV1 def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_filterV1'; def.OutputFcnSpec = 'single y1 = filterV1(single u1, single u2, single p1)'; def.HeaderFiles = {'myfilter.h'}; def.SourceFiles = {'filterV1.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def]; % rtwdemo_sfun_filterV2 def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_filterV2'; def.OutputFcnSpec = 'single y1 = filterV2(single u1[1], single u2, single p1)'; def.HeaderFiles = {'myfilter.h'}; def.SourceFiles = {'filterV2.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def];
Сгенерируйте S-функции для симуляции
Чтобы сгенерировать S-функции C-MEX согласно описанию, предоставленному входным параметром 'defs', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-функции вызывают устаревшие функции в симуляции. Исходный код для S-функций находится в файлах rtwdemo_sfun_filterV1.c и rtwdemo_sfun_filterV2.c.
legacy_code('sfcn_cmex_generate', defs);
Скомпилируйте сгенерированные S-функции для симуляции
После того, как вы сгенерируете исходные файлы S-функции C-MEX, чтобы скомпилировать S-функции для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', defs);
### Start Compiling rtwdemo_sfun_filterV1 mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19632214', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp300ff156_ddb5_4e04_a86a_1ee2b6cd541a', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/filterV1.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_filterV1.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19632214', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp300ff156_ddb5_4e04_a86a_1ee2b6cd541a/filterV1.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_filterV1 ### Exit ### Start Compiling rtwdemo_sfun_filterV2 mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19632214', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp29cc5d8e_77c5_4063_abba_54aa64cb4e10', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/filterV2.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_filterV2.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19632214', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp29cc5d8e_77c5_4063_abba_54aa64cb4e10/filterV2.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_filterV2 ### Exit
Сгенерируйте файлы блока TLC для генерации кода
После того, как вы будете компилировать S-функции и использовать их в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файлы блока TLC. Блокируйтесь файлы задают, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файлы блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функции, сбои генерации кода. Файлы блока TLC для S-функций являются rtwdemo_sfun_filterV1.tlc и rtwdemo_sfun_filterV2.tlc.
legacy_code('sfcn_tlc_generate', defs);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файлы блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функций не находятся в той же папке как S-функции, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', defs);
Сгенерируйте блоки s-function маскированные для вызова сгенерированных S-функций
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать замаскированные Блоки s-function, которые вызывают S-функции. Программное обеспечение помещает блоки в новую модель. Оттуда можно скопировать их в существующую модель.
legacy_code('slblock_generate', defs);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_filter показывает интегрирование модели с унаследованным кодом. Подсистема TestFilter служит обвязкой для вызовов наследия C функции через сгенерировать S-функции с единичными задержками, служа, чтобы сохранить предыдущие выходные значения.
open_system('rtwdemo_lct_filter') open_system('rtwdemo_lct_filter/TestFilter') sim('rtwdemo_lct_filter')
В этом примере показано, как использовать Legacy Code Tool, чтобы интегрировать наследие C функции, которые передают их выход как возвращаемый аргумент.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
FLT gainScalar (const FLT в, const усиление FLT)
FLT является определением типа, чтобы плавать. Устаревший исходный код находится в файлах your_types.h, gain.h, и gainScalar.c.
% rtwdemo_sfun_gain_scalar def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_gain_scalar'; def.OutputFcnSpec = 'single y1 = gainScalar(single u1, single p1)'; def.HeaderFiles = {'gain.h'}; def.SourceFiles = {'gainScalar.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_gain_scalar.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_gain_scalar mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex09148220', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpa9307f31_73b3_43e7_a7bd_68b95d17c111', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_gain_scalar.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex09148220', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpa9307f31_73b3_43e7_a7bd_68b95d17c111/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_gain_scalar ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_gain_scalar.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_gain показывает интегрирование модели с унаследованным кодом. Подсистема TestGain служит обвязкой для вызова наследия C функция через сгенерировать S-функцию.
open_system('rtwdemo_lct_gain') open_system('rtwdemo_lct_gain/TestGain') sim('rtwdemo_lct_gain')
Интегрируйте устаревшие методы объекта C++ при помощи Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C++ MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который вызывает унаследованный код во время генерации кода.
Предоставьте устаревшую функциональную спецификацию
Функции, которым предоставляют Legacy Code Tool, берут определенную структуру данных или массив структур в качестве аргумента. Структура данных инициализируется путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Определение устаревшего класса C++ в этом примере:
class adder { private: int int_state; public: adder(); int add_one(int increment); int get_val(); };
Устаревший исходный код находится в файлах adder_cpp.h и adder_cpp.cpp.
% rtwdemo_sfun_adder_cpp def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_adder_cpp'; def.StartFcnSpec = 'createAdder()'; def.OutputFcnSpec = 'int32 y1 = adderOutput(int32 u1)'; def.TerminateFcnSpec = 'deleteAdder()'; def.HeaderFiles = {'adder_cpp.h'}; def.SourceFiles = {'adder_cpp.cpp'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; def.Options.language = 'C++'; def.Options.useTlcWithAccel = false;
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_adder_cpp.cpp.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_adder_cpp mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1302590_239645/publish_examples6/tpf6b345a5/ex06428671', '-c', '-outdir', '/tmp/BR2020ad_1302590_239645/publish_examples6/tp8ce78f13_3986_4665_9ed4_d23dda40a9cb', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/adder_cpp.cpp') Building with 'g++'. MEX completed successfully. mex('rtwdemo_sfun_adder_cpp.cpp', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1302590_239645/publish_examples6/tpf6b345a5/ex06428671', '-cxx', '/tmp/BR2020ad_1302590_239645/publish_examples6/tp8ce78f13_3986_4665_9ed4_d23dda40a9cb/adder_cpp.o') Building with 'g++'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_adder_cpp ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова. Установите первый вход на 'sfcn_tlc_generate' генерировать файл блока TLC, который поддерживает генерацию кода через Simulink® Coder™. Если файл блока TLC не создается, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_adder_cpp.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова. Установите первый вход на 'rtwmakecfg_generate' генерировать rtwmakecfg.m файл, который поддерживает генерацию кода через Simulink® Coder™. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы скомпилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова. Установите первый вход на 'slblock_generate' генерировать Блок s-function маскированный, который сконфигурирован, чтобы вызвать ту S-функцию. Программное обеспечение помещает блок в новую модель. Можно скопировать блок в существующую модель.
% legacy_code('slblock_generate', def);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_cpp показывает интеграцию с унаследованным кодом.
open_system('rtwdemo_lct_cpp') sim('rtwdemo_lct_cpp')
Интегрируйте наследие C функции, которые передают их вводы и выводы при помощи параметров типа данных с фиксированной точкой с Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
myFixpt timesS16 (const myFixpt in1, const myFixpt in2, const uint8_T fracLength)
myFixpt является логически типом данных фиксированной точки, который является физически определением типа к 16-битному целому числу:
myFixpt = Simulink.NumericType; myFixpt.DataTypeMode = 'Fixed-point: binary point scaling'; myFixpt.Signed = true; myFixpt.WordLength = 16; myFixpt.FractionLength = 10; myFixpt.IsAlias = true; myFixpt.HeaderFile = 'timesFixpt.h';
Устаревший исходный код находится в файлах timesFixpt.h и timesS16.c.
% rtwdemo_sfun_gain_fixpt def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_gain_fixpt'; def.OutputFcnSpec = 'myFixpt y1 = timesS16(myFixpt u1, myFixpt p1, uint8 p2)'; def.HeaderFiles = {'timesFixpt.h'}; def.SourceFiles = {'timesS16.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_gain_fixpt.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_gain_fixpt mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex05928773', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpe2eaad25_bb67_4464_ac90_4df45c7d4b57', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/timesS16.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_gain_fixpt.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex05928773', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpe2eaad25_bb67_4464_ac90_4df45c7d4b57/timesS16.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_gain_fixpt ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова. Установите первый вход на 'sfcn_tlc_generate' генерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_gain_fixpt.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова. Установите первый вход на 'rtwmakecfg_generate' генерировать rtwmakecfg.m файл, который поддерживает генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы скомпилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова. Установите первый вход на 'slblock_generate' генерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Можно скопировать блок в существующую модель.
legacy_code('slblock_generate', def);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_fixpt_params показывает интегрирование модели с унаследованным кодом. Подсистема TestFixpt служит обвязкой для вызова наследия C функция через сгенерированную S-функцию.
open_system('rtwdemo_lct_fixpt_params') open_system('rtwdemo_lct_fixpt_params/TestFixpt') sim('rtwdemo_lct_fixpt_params')
В этом примере показано, как использовать Legacy Code Tool, чтобы интегрировать наследие C функции, которые передают их вводы и выводы при помощи параметров типа данных с фиксированной точкой.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
myFixpt timesS16 (const myFixpt in1, const myFixpt in2, const uint8_T fracLength)
myFixpt является логически типом данных с фиксированной точкой, который является физически определением типа к 16-битному целому числу:
myFixpt = Simulink.NumericType; myFixpt.DataTypeMode = 'Fixed-point: binary point scaling'; myFixpt.Signed = true; myFixpt.WordLength = 16; myFixpt.FractionLength = 10; myFixpt.IsAlias = true; myFixpt.HeaderFile = 'timesFixpt.h';
Устаревший исходный код находится в файлах timesFixpt.h и timesS16.c.
% rtwdemo_sfun_times_s16 def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_times_s16'; def.OutputFcnSpec = 'myFixpt y1 = timesS16(myFixpt u1, myFixpt u2, uint8 p1)'; def.HeaderFiles = {'timesFixpt.h'}; def.SourceFiles = {'timesS16.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_times_s16.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_times_s16 mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex96454812', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp71fc0376_b9ed_41dc_8ecb_c0dd503fdd38', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/timesS16.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_times_s16.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex96454812', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp71fc0376_b9ed_41dc_8ecb_c0dd503fdd38/timesS16.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_times_s16 ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_times_s16.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Покажите интегрирование модели с унаследованным кодом
Модель rtwdemo_lct_fixpt_signals показывает интегрирование модели с унаследованным кодом. Подсистема TestFixpt служит обвязкой для вызова наследия C функция через сгенерированную S-функцию.
open_system('rtwdemo_lct_fixpt_signals') open_system('rtwdemo_lct_fixpt_signals/TestFixpt') sim('rtwdemo_lct_fixpt_signals')
Интегрируйте наследие C функции, которые используют специфичную для экземпляра постоянную память при помощи Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототипы устаревших функций, названных в этом примере:
освободите memory_bus_init (COUNTERBUS *мадам, int32_T upper_sat, int32_T lower_sat);
освободите memory_bus_step (COUNTERBUS *вход, COUNTERBUS *мадам, COUNTERBUS *выход);
мадам является специфичной для экземпляра постоянной памятью для применения одной задержки этапа интеграции. COUNTERBUS является определением типа struct, заданным в counterbus.h и реализованным с Simulink.Bus object в базовом рабочем пространстве. Устаревший исходный код находится в файлах memory_bus.h, и memory_bus.c.
evalin('base','load rtwdemo_lct_data.mat') % rtwdemo_sfun_work def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_work'; def.InitializeConditionsFcnSpec = ... 'void memory_bus_init(COUNTERBUS work1[1], int32 p1, int32 p2)'; def.OutputFcnSpec = ... 'void memory_bus_step(COUNTERBUS u1[1], COUNTERBUS work1[1], COUNTERBUS y1[1])'; def.HeaderFiles = {'memory_bus.h'}; def.SourceFiles = {'memory_bus.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_work.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_work mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex38707886', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp94e09bef_b34d_442b_b613_91f2f6f00a13', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/memory_bus.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_work.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex38707886', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp94e09bef_b34d_442b_b613_91f2f6f00a13/memory_bus.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_work ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_work.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Покажите интегрирование модели с унаследованным кодом
Модель rtwdemo_lct_work показывает интегрирование модели с унаследованным кодом. Подсистема memory_bus служит обвязкой для вызова наследия C функция.
open_system('rtwdemo_lct_work') open_system('rtwdemo_lct_work/memory_bus') sim('rtwdemo_lct_work')
Интегрируйте наследие C функции с аргументами структуры, которые используют шины Simulink® с Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
counterbusFcn (COUNTERBUS *u1, int32_T u2, COUNTERBUS *y1, int32_T *y2)
COUNTERBUS является определением типа struct, заданным в counterbus.h и реализованным с Simulink.Bus object в базовом рабочем пространстве. Устаревший исходный код находится в файлах counterbus.h и counterbus.c.
evalin('base','load rtwdemo_lct_data.mat') % rtwdemo_sfun_counterbus def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_counterbus'; def.OutputFcnSpec = ... 'void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])'; def.HeaderFiles = {'counterbus.h'}; def.SourceFiles = {'counterbus.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_counterbus.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_counterbus mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex90330074', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp7c6c3fe3_3366_49ba_8ec5_13bda05ef22e', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/counterbus.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_counterbus.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex90330074', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp7c6c3fe3_3366_49ba_8ec5_13bda05ef22e/counterbus.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_counterbus ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_counterbus.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Покажите интегрирование модели с унаследованным кодом
Модель rtwdemo_lct_bus показывает интегрирование модели с унаследованным кодом. Подсистема TestCounter служит обвязкой для вызова наследия C функция.
open_system('rtwdemo_lct_bus') open_system('rtwdemo_lct_bus/TestCounter') sim('rtwdemo_lct_bus')
Интегрируйте наследие C функции с помощью комплексных сигналов с Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
освободите cplx_gain (creal_T *вход, creal_T *усиление, creal_T *выход);
creal_T является комплексным представлением двойного. Устаревший исходный код находится в файлах cplxgain.h и cplxgain.c.
% rtwdemo_sfun_gain_scalar def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_cplx_gain'; def.OutputFcnSpec = ... ['void cplx_gain(complex<double> u1[1], '... 'complex<double> p1[1], complex<double> y1[1])']; def.HeaderFiles = {'cplxgain.h'}; def.SourceFiles = {'cplxgain.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_cplx_gain.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_cplx_gain mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex97344681', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp04ee0a45_a561_406b_b3a8_7a45e695db7f', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/cplxgain.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_cplx_gain.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex97344681', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp04ee0a45_a561_406b_b3a8_7a45e695db7f/cplxgain.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_cplx_gain ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_cplx_gain.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Покажите интегрирование модели с унаследованным кодом
Модель rtwdemo_lct_cplxgain показывает интегрирование модели с унаследованным кодом. Подсистема complex_gain служит обвязкой для вызова наследия C функция через сгенерировать S-функцию.
if isempty(find_system('SearchDepth',0,'Name','rtwdemo_lct_cplxgain')) open_system('rtwdemo_lct_cplxgain') open_system('rtwdemo_lct_cplxgain/complex_gain') sim('rtwdemo_lct_cplxgain') end
В этом примере показано, как использовать Legacy Code Tool, чтобы объединяться, наследие C функционирует, чьи аргументы наследовали размерности.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототипы устаревших функций, названных в этом примере:
освободите mat_add (real_T *u1, real_T *u2, int32_T nbRows, int32_T nbCols, real_T *y1)
освободите mat_mult (real_T *u1, real_T *u2, int32_T nbRows1, int32_T nbCols1, int32_T nbCols2, real_T *y1)
real_T является определением типа, чтобы удвоиться, и int32_T является определением типа к 32-битному целому числу. Устаревший исходный код находится в файлах mat_ops.h, и mat_ops.c.
defs = []; % rtwdemo_sfun_mat_add def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_mat_add'; def.OutputFcnSpec = ['void mat_add(double u1[][], double u2[][], ' ... 'int32 u3, int32 u4, double y1[size(u1,1)][size(u1,2)])']; def.HeaderFiles = {'mat_ops.h'}; def.SourceFiles = {'mat_ops.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def]; % rtwdemo_sfun_mat_mult def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_mat_mult'; def.OutputFcnSpec = ['void mat_mult(double u1[p1][p2], double u2[p2][p3], '... 'int32 p1, int32 p2, int32 p3, double y1[p1][p3])']; def.HeaderFiles = {'mat_ops.h'}; def.SourceFiles = {'mat_ops.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def];
Сгенерируйте S-функции для симуляции
Чтобы сгенерировать S-функции C-MEX согласно описанию, предоставленному входным параметром 'defs', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-функции вызывают устаревшие функции в процессе моделирования. Исходный код для S-функции находится в файлах rtwdemo_sfun_mat_add.c и rtwdemo_sfun_mat_mult.c.
legacy_code('sfcn_cmex_generate', defs);
Скомпилируйте сгенерированные S-функции для симуляции
После того, как вы сгенерируете исходные файлы S-функции C-MEX, чтобы скомпилировать S-функции для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', defs);
### Start Compiling rtwdemo_sfun_mat_add mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex89794148', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp9d60dd22_6469_44c8_baf9_532e853c58c4', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/mat_ops.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_mat_add.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex89794148', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp9d60dd22_6469_44c8_baf9_532e853c58c4/mat_ops.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_mat_add ### Exit ### Start Compiling rtwdemo_sfun_mat_mult mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex89794148', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpd1125401_3016_4b20_b8c1_ffdf6b6fa8c1', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/mat_ops.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_mat_mult.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex89794148', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpd1125401_3016_4b20_b8c1_ffdf6b6fa8c1/mat_ops.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_mat_mult ### Exit
Сгенерируйте файлы блока TLC для генерации кода
После того, как вы будете компилировать S-функции и использовать их в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файлы блока TLC. Блокируйтесь файлы задают, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файлы блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функции, сбои генерации кода. Файлы блока TLC для S-функций являются rtwdemo_sfun_mat_add.tlc и rtwdemo_sfun_mat_mult.tlc.
legacy_code('sfcn_tlc_generate', defs);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файлы блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функций не находятся в той же папке как S-функции, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', defs);
Сгенерируйте блоки s-function маскированные для вызова сгенерированных S-функций
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать замаскированные Блоки s-function, которые вызывают S-функции. Программное обеспечение помещает блоки в новую модель. Оттуда можно скопировать их в существующую модель
legacy_code('slblock_generate', defs);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_inherit_dims показывает интегрирование модели с унаследованным кодом. Подсистема TestMatOps служит обвязкой для вызовов наследия C функции с единичными задержками, служа, чтобы сохранить предыдущие выходные значения.
open_system('rtwdemo_lct_inherit_dims') open_system('rtwdemo_lct_inherit_dims/TestMatOps') sim('rtwdemo_lct_inherit_dims')
В этом примере показано, как использовать Legacy Code Tool, чтобы объединяться, наследие C функционирует с многомерными Сигналами.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
освободите array3d_add (real_T *y1, real_T *u1, real_T *u2, int32_T nbRows, int32_T nbCols, int32_T nbPages);
real_T является определением типа, чтобы удвоиться, и int32_T является определением типа к 32-битному целому числу. Устаревший исходный код находится в файлах ndarray_ops.h, и ndarray_ops.c.
% rtwdemo_sfun_ndarray_add def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_ndarray_add'; def.OutputFcnSpec =... ['void array3d_add(double y1[size(u1,1)][size(u1,2)][size(u1,3)], ',... 'double u1[][][], double u2[][][], ' ... 'int32 size(u1,1), int32 size(u1,2), int32 size(u1,3))']; def.HeaderFiles = {'ndarray_ops.h'}; def.SourceFiles = {'ndarray_ops.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
y1 является 3-D выходным сигналом тех же размерностей как 3-D входной сигнал u1. Обратите внимание на то, что последние 3 аргумента, переданные устаревшей функции, соответствуют количеству элемента в каждой размерности 3-D входного сигнала u1.
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_ndarray_add.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_ndarray_add mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex14927435', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp8bae407d_e053_49eb_b3c7_93329beb14b9', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ndarray_ops.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_ndarray_add.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex14927435', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp8bae407d_e053_49eb_b3c7_93329beb14b9/ndarray_ops.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_ndarray_add ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_ndarray_add.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Показ сгенерированной интеграции с унаследованным кодом
Модель rtwdemo_lct_ndarray показывает интегрирование модели с унаследованным кодом. Подсистема ndarray_add служит обвязкой для вызова наследия C функция.
open_system('rtwdemo_lct_ndarray') open_system('rtwdemo_lct_ndarray/ndarray_add') sim('rtwdemo_lct_ndarray')
Интегрируйте наследие C функции, которые имеют, запускают и отключают действия при помощи Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототипы устаревших функций, названных в этом примере:
освободите initFaultCounter (int без знака *счетчик)
освободите openLogFile (пусто ** fid)
освободите incAndLogFaultCounter (пусто *fid, int без знака *противостоит, ускоренному маршу),
освободите closeLogFile (пусто ** fid)
Устаревший исходный код находится в файлах your_types.h, fault.h, и fault.c.
% rtwdemo_sfun_fault def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_fault'; def.InitializeConditionsFcnSpec = 'initFaultCounter(uint32 work2[1])'; def.StartFcnSpec = 'openLogFile(void **work1)'; def.OutputFcnSpec = ... 'incAndLogFaultCounter(void *work1, uint32 work2[1], double u1)'; def.TerminateFcnSpec = 'closeLogFile(void **work1)'; def.HeaderFiles = {'fault.h'}; def.SourceFiles = {'fault.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; def.Options.useTlcWithAccel = false;
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_fault.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_fault mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex46254423', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp53f3943c_173d_4e79_8464_8d440a2da329', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/fault.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_fault.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex46254423', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp53f3943c_173d_4e79_8464_8d440a2da329/fault.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_fault ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_fault.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Показ сгенерированной интеграции с унаследованным кодом
Модель rtwdemo_lct_start_term показывает интегрирование модели с унаследованным кодом. Подсистема TestFixpt служит обвязкой для вызова наследия C функция и осциллограф, сравнивает выход функции с выходом встроенного блока продукта Simulink®; результаты должны быть идентичными.
open_system('rtwdemo_lct_start_term') open_system('rtwdemo_lct_start_term/TestFault') sim('rtwdemo_lct_start_term')
Интегрируйте наследие C функции, которые реализуют N-мерный поиск по таблице при помощи Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
FLT directLookupTableND (const FLT *tableND, const UINT32 nbDims, const UINT32 *tableDims, const UINT32 *tableIdx)
FLT является определением типа, чтобы плавать, и UINT32 является определением типа к int32 без знака. Устаревший исходный код находится в файлах your_types.h, lookupTable.h, и directLookupTableND.c.
defs = []; evalin('base','load rtwdemo_lct_data.mat') % rtwdemo_sfun_dlut3D def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_dlut3D'; def.OutputFcnSpec = 'single y1 = DirectLookupTable3D(single p1[][][], uint32 p2[3], uint32 u1[3])'; def.HeaderFiles = {'lookupTable.h'}; def.SourceFiles = {'directLookupTableND.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def]; % rtwdemo_sfun_dlut4D def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_dlut4D'; def.OutputFcnSpec = 'single y1 = DirectLookupTable4D(single p1[][][][], uint32 p2[4], uint32 u1[4])'; def.HeaderFiles = {'lookupTable.h'}; def.SourceFiles = {'directLookupTableND.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def];
Сгенерируйте S-функции для симуляции
Чтобы сгенерировать S-функции C-MEX согласно описанию, предоставленному входным параметром 'defs', вызовите функцию legacy_code () снова. Установите первый вход на 'sfcn_cmex_generate'. S-функции вызывают устаревшие функции в процессе моделирования. Исходный код для S-функций находится в файлах rtwdemo_sfun_dlut3D.c и rtwdemo_sfun_dlut4D.c.
legacy_code('sfcn_cmex_generate', defs);
Скомпилируйте сгенерированные S-функции для симуляции
После того, как вы сгенерируете исходные файлы S-функции C-MEX, чтобы скомпилировать S-функции для симуляции с Simulink®, вызовите функцию legacy_code () снова. Установите первый вход 'компилировать'.
legacy_code('compile', defs);
### Start Compiling rtwdemo_sfun_dlut3D mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19426386', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpb96d4ea0_acd3_42cd_8863_eccf91fc3394', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/directLookupTableND.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_dlut3D.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19426386', '/tmp/BR2020ad_1316498_123416/publish_examples0/tpb96d4ea0_acd3_42cd_8863_eccf91fc3394/directLookupTableND.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_dlut3D ### Exit ### Start Compiling rtwdemo_sfun_dlut4D mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19426386', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp4305a9cf_3a07_454c_9056_514b95a3219f', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/directLookupTableND.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_dlut4D.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex19426386', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp4305a9cf_3a07_454c_9056_514b95a3219f/directLookupTableND.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_dlut4D ### Exit
Сгенерируйте файлы блока TLC для генерации кода
После того, как вы будете компилировать S-функции и использовать их в симуляции, можно вызвать функцию legacy_code () снова. Установите первый вход на 'sfcn_tlc_generate' генерировать файлы блока TLC. Блокируйтесь файлы задают, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файлы блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функции, сбои генерации кода. Файлы блока TLC для S-функций являются rtwdemo_sfun_dlut3D.tlc и rtwdemo_sfun_dlut4D.tlc.
legacy_code('sfcn_tlc_generate', defs);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файлы блока TLC, можно вызвать функцию legacy_code () снова. Установите первый вход на 'rtwmakecfg_generate' генерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функций не находятся в той же папке как S-функции, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', defs);
Сгенерируйте блоки s-function маскированные для вызова сгенерированных S-функций
После того, как вы скомпилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова. Установите первый вход на 'slblock_generate' генерировать замаскированные Блоки s-function, которые вызывают S-функции. Программное обеспечение помещает блоки в новую модель. Можно скопировать блоки в существующую модель.
legacy_code('slblock_generate', defs);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_lut показывает интегрирование модели с унаследованным кодом. Подсистема TestFixpt служит обвязкой для вызова наследия C функция и блоки Отображения, сравнивает выход функции с выходом встроенных блоков поиска Simulink®. Результаты идентичны.
open_system('rtwdemo_lct_lut') open_system('rtwdemo_lct_lut/TestLut1') sim('rtwdemo_lct_lut')
В этом примере показано, как использовать Legacy Code Tool, чтобы объединяться, наследие C функционирует с многомерными Сигналами.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
освободите array3d_add (real_T *y1, real_T *u1, real_T *u2, int32_T nbRows, int32_T nbCols, int32_T nbPages);
real_T является определением типа, чтобы удвоиться, и int32_T является определением типа к 32-битному целому числу. Устаревший исходный код находится в файлах ndarray_ops.h, и ndarray_ops.c.
% rtwdemo_sfun_ndarray_add def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_ndarray_add'; def.OutputFcnSpec =... ['void array3d_add(double y1[size(u1,1)][size(u1,2)][size(u1,3)], ',... 'double u1[][][], double u2[][][], ' ... 'int32 size(u1,1), int32 size(u1,2), int32 size(u1,3))']; def.HeaderFiles = {'ndarray_ops.h'}; def.SourceFiles = {'ndarray_ops.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'};
y1 является 3-D выходным сигналом тех же размерностей как 3-D входной сигнал u1. Обратите внимание на то, что последние 3 аргумента, переданные устаревшей функции, соответствуют количеству элемента в каждой размерности 3-D входного сигнала u1.
Сгенерируйте S-функцию для симуляции
Чтобы сгенерировать S-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_ndarray_add.c.
legacy_code('sfcn_cmex_generate', def);
Скомпилируйте сгенерированную S-функцию для симуляции
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_ndarray_add mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex14927435', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp8bae407d_e053_49eb_b3c7_93329beb14b9', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/ndarray_ops.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_ndarray_add.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples1/tpf0ea7ead/ex14927435', '/tmp/BR2020ad_1316498_123416/publish_examples1/tp8bae407d_e053_49eb_b3c7_93329beb14b9/ndarray_ops.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_ndarray_add ### Exit
Сгенерируйте файл блока TLC для генерации кода
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файл блока TLC. Файл блока задает, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файл блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_ndarray_add.tlc.
legacy_code('sfcn_tlc_generate', def);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
Сгенерируйте блок s-function маскированный для вызова сгенерированной S-функции
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать Блок s-function маскированный, который вызывает ту S-функцию. Программное обеспечение помещает блок в новую модель. Оттуда можно скопировать его в существующую модель.
legacy_code('slblock_generate', def);
Показ сгенерированной интеграции с унаследованным кодом
Модель rtwdemo_lct_ndarray показывает интегрирование модели с унаследованным кодом. Подсистема ndarray_add служит обвязкой для вызова наследия C функция.
open_system('rtwdemo_lct_ndarray') open_system('rtwdemo_lct_ndarray/ndarray_add') sim('rtwdemo_lct_ndarray')
В этом примере показано, как использовать Legacy Code Tool, чтобы объединяться, наследие C функционирует с шагом расчета блока, заданным, наследованным и параметрированным.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции legacy_code (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Для подробной справки на свойствах вызовите legacy_code ('справка'). Прототип устаревших функций, названных в этом примере:
FLT gainScalar (const FLT в, const усиление FLT)
FLT является определением типа, чтобы плавать. Устаревший исходный код находится в файлах your_types.h, gain.h, и gainScalar.c.
defs = []; % rtwdemo_sfun_st_inherited def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_st_inherited'; def.OutputFcnSpec = 'single y1 = gainScalar(single u1, single p1)'; def.HeaderFiles = {'gain.h'}; def.SourceFiles = {'gainScalar.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; defs = [defs; def]; % rtwdemo_sfun_st_fixed def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_st_fixed'; def.OutputFcnSpec = 'single y1 = gainScalar(single u1, single p1)'; def.HeaderFiles = {'gain.h'}; def.SourceFiles = {'gainScalar.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; def.SampleTime = [2 1]; defs = [defs; def]; % rtwdemo_sfun_st_parameterized def = legacy_code('initialize'); def.SFunctionName = 'rtwdemo_sfun_st_parameterized'; def.OutputFcnSpec = 'single y1 = gainScalar(single u1, single p1)'; def.HeaderFiles = {'gain.h'}; def.SourceFiles = {'gainScalar.c'}; def.IncPaths = {'rtwdemo_lct_src'}; def.SrcPaths = {'rtwdemo_lct_src'}; def.SampleTime = 'parameterized'; defs = [defs; def];
Сгенерируйте S-функции для симуляции
Чтобы сгенерировать S-функции C-MEX согласно описанию, предоставленному входным параметром 'defs', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-функции вызывают устаревшие функции в процессе моделирования. Исходный код для S-функций находится в файлах rtwdemo_sfun_st_inherited.c и rtwdemo_sfun_st_fixed.c. rtwdemo_sfun_st_parameterized.c.
legacy_code('sfcn_cmex_generate', defs);
Скомпилируйте сгенерированные S-функции для симуляции
После того, как вы сгенерируете исходные файлы S-функции C-MEX, чтобы скомпилировать S-функции для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', defs);
### Start Compiling rtwdemo_sfun_st_inherited mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp8b48c067_c7f5_44ef_9625_70aa5681a7f5', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_st_inherited.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp8b48c067_c7f5_44ef_9625_70aa5681a7f5/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_st_inherited ### Exit ### Start Compiling rtwdemo_sfun_st_fixed mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp7e6875e8_21cc_4fae_8377_a4b60dcb35ae', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_st_fixed.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp7e6875e8_21cc_4fae_8377_a4b60dcb35ae/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_st_fixed ### Exit ### Start Compiling rtwdemo_sfun_st_parameterized mex('-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '-c', '-outdir', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp3f95031b_dfbf_4607_b2a4_d04d88ceaff6', '/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('rtwdemo_sfun_st_parameterized.c', '-I/mathworks/devel/bat/BR2020ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020ad_1316498_123416/publish_examples0/tpd547fd45/ex74504488', '/tmp/BR2020ad_1316498_123416/publish_examples0/tp3f95031b_dfbf_4607_b2a4_d04d88ceaff6/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_st_parameterized ### Exit
Сгенерируйте файлы блока TLC для генерации кода
После того, как вы будете компилировать S-функции и использовать их в симуляции, можно вызвать функцию legacy_code () снова с первым входным набором к 'sfcn_tlc_generate', чтобы сгенерировать файлы блока TLC. Блокируйтесь файлы задают, как сгенерированный код для модели вызывает унаследованный код. Если вы не генерируете файлы блока TLC, и вы пытаетесь сгенерировать код для модели, которая включает S-функции, сбои генерации кода. Файлы блока TLC для S-функций являются rtwdemo_sfun_st_inherited.tlc и rtwdemo_sfun_st_fixed.tlc. rtwdemo_sfun_st_parameterized.tlc.
legacy_code('sfcn_tlc_generate', defs);
Сгенерируйте rtwmakecfg.m Файл для Генерации кода
После того, как вы создадите файлы блока TLC, можно вызвать функцию legacy_code () снова с первым входным набором к 'rtwmakecfg_generate', чтобы сгенерировать rtwmakecfg.m файл, чтобы поддержать генерацию кода. Если необходимый источник и заголовочные файлы для S-функций не находятся в той же папке как S-функции, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', defs);
Сгенерируйте блоки s-function маскированные для вызова сгенерированных S-функций
После того, как вы компилируете источник S-функции C-MEX, можно вызвать функцию legacy_code () снова с первым входным набором к 'slblock_generate', чтобы сгенерировать замаскированные Блоки s-function, которые вызывают S-функции. Программное обеспечение помещает блоки в новую модель. Оттуда можно скопировать их в существующую модель.
legacy_code('slblock_generate', defs);
Покажите сгенерированную интеграцию с унаследованным кодом
Модель rtwdemo_lct_sampletime показывает интегрирование модели с унаследованным кодом. Подсистема sample_time служит обвязкой для вызовов наследия C функции с единичными задержками, служа, чтобы сохранить предыдущие выходные значения.
open_system('rtwdemo_lct_sampletime') open_system('rtwdemo_lct_sampletime/sample_time') sim('rtwdemo_lct_sampletime')