Интегрируйте устаревшие методы объекта C++ при помощи Legacy Code Tool.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C++ MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который вызывает унаследованный код во время генерации кода.
Функции, которым предоставляют Legacy Code Tool, берут определенную структуру данных или массив структур в качестве аргумента. Структура данных инициализируется путем вызывания функции 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-функцию C-MEX согласно описанию, предоставленному входным параметром 'определение', вызовите функцию legacy_code () снова с первым входным набором к 'sfcn_cmex_generate'. S-вызовы-функции наследие функционируют в процессе моделирования. Исходный код для S-функции находится в файле rtwdemo_sfun_adder_cpp.cpp.
legacy_code('sfcn_cmex_generate', def);
После того, как вы сгенерируете исходный файл S-функции C-MEX, чтобы скомпилировать S-функцию для симуляции с Simulink®, вызовите функцию legacy_code () снова с первым входным набором, чтобы 'скомпилировать'.
legacy_code('compile', def);
### Start Compiling rtwdemo_sfun_adder_cpp mex('-I/mathworks/devel/bat/BR2021bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021bd_1724986_151598/publish_examples4/tp638a2554/ex06428671', '-c', '-outdir', '/tmp/BR2021bd_1724986_151598/publish_examples4/tpf24f5082_0e7d_4b22_ae21_52c6e1c3da06', '/mathworks/devel/bat/BR2021bd/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/BR2021bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021bd_1724986_151598/publish_examples4/tp638a2554/ex06428671', '-cxx', '/tmp/BR2021bd_1724986_151598/publish_examples4/tpf24f5082_0e7d_4b22_ae21_52c6e1c3da06/adder_cpp.o') Building with 'g++'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_adder_cpp ### Exit
После того, как вы будете компилировать S-функцию и использовать ее в симуляции, можно вызвать функцию legacy_code () снова. Установите первый вход на 'sfcn_tlc_generate' генерировать файл блока TLC, который поддерживает генерацию кода через Simulink® Coder™. Если файл блока TLC не создается, и вы пытаетесь сгенерировать код для модели, которая включает S-функцию, сбои генерации кода. Файл блока TLC для S-функции: rtwdemo_sfun_adder_cpp.tlc.
legacy_code('sfcn_tlc_generate', def);
После того, как вы создадите файл блока TLC, можно вызвать функцию legacy_code () снова. Установите первый вход на 'rtwmakecfg_generate' генерировать rtwmakecfg.m файл, который поддерживает генерацию кода через Simulink® Coder™. Если необходимый источник и заголовочные файлы для S-функции не находятся в той же папке как S-функция, и вы хотите добавить эти зависимости в make-файле, произведенном во время генерации кода, сгенерировать rtwmakecfg.m файл.
legacy_code('rtwmakecfg_generate', def);
После того, как вы скомпилируете источник 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')