Можно использовать Simulink® Legacy Code Tool, чтобы сгенерировать полностью встроенные S-функции MEX C для наследия или пользовательского кода. S-функции оптимизированы для встроенных компонентов, таких как драйверы устройств и интерполяционные таблицы, и они вызывают существующий C или функции C++. Эти примеры показывают, как использовать Legacy Code Tool, чтобы интегрировать множество внешних функций.
В этом примере показано, как использовать Legacy Code Tool, чтобы интегрировать наследие C функции, которые передают их входные параметры значением по сравнению с адресом.
С Legacy Code Tool вы можете:
Предоставьте устаревшую функциональную спецификацию.
Сгенерируйте S-функцию C-MEX, которая вызывает унаследованный код в процессе моделирования.
Скомпилируйте и создайте сгенерированную S-функцию для симуляции.
Сгенерируйте файл блока TLC и дополнительный rtwmakecfg.m файл, который задает, как сгенерированный код для модели вызывает унаследованный код.
Предоставьте устаревшую функциональную спецификацию
Функции Legacy Code Tool берут определенную структуру данных или массив структур в качестве аргумента. Можно инициализировать структуру данных путем вызывания функции 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex19632214', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp10ea571f_5466_40d8_bea0_ec5d12c6970d', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex19632214', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp10ea571f_5466_40d8_bea0_ec5d12c6970d/filterV1.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_filterV1 ### Exit ### Start Compiling rtwdemo_sfun_filterV2 mex('-I/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex19632214', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp3cbff89f_0f8d_41c1_822e_7d45e8bded4b', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex19632214', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp3cbff89f_0f8d_41c1_822e_7d45e8bded4b/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex09148220', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpf131ed4a_0f1b_4580_8b13_aaa37bac7e3b', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex09148220', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpf131ed4a_0f1b_4580_8b13_aaa37bac7e3b/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Определение устаревшего класса 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples5/tpc56de889/ex06428671', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples5/tp66b2afce_86d9_4640_b52a_2acaaab738b2', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples5/tpc56de889/ex06428671', '-cxx', '/tmp/BR2021ad_1584584_202060/publish_examples5/tp66b2afce_86d9_4640_b52a_2acaaab738b2/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex05928773', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpffa46896_ae8c_46b0_bf61_6f4e5d3e21e6', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex05928773', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpffa46896_ae8c_46b0_bf61_6f4e5d3e21e6/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex96454812', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpf321327e_a855_44ec_977a_4ef16c8c0f3d', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex96454812', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpf321327e_a855_44ec_977a_4ef16c8c0f3d/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототипы устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex38707886', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe80f8c8_ce62_44ee_be3d_f75bd74a70a1', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex38707886', '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe80f8c8_ce62_44ee_be3d_f75bd74a70a1/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex90330074', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp1e49f975_722b_4ada_9d1a_36476df7170d', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex90330074', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp1e49f975_722b_4ada_9d1a_36476df7170d/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex97344681', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp4230a205_46c4_40d4_8429_7e362a18bd8a', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex97344681', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp4230a205_46c4_40d4_8429_7e362a18bd8a/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототипы устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex89794148', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp49ef0950_7fe2_4ff0_b1ff_a4ce8281f80c', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex89794148', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp49ef0950_7fe2_4ff0_b1ff_a4ce8281f80c/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex89794148', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp065d8091_18e4_4132_946c_a0c7d2d03ff6', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex89794148', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp065d8091_18e4_4132_946c_a0c7d2d03ff6/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex14927435', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp6d56cb76_760f_453b_8a21_051a894f9b86', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex14927435', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp6d56cb76_760f_453b_8a21_051a894f9b86/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототипы устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex46254423', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp38bf5c75_bf4f_4817_b007_fe2f2ddeccfd', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex46254423', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp38bf5c75_bf4f_4817_b007_fe2f2ddeccfd/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex19426386', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tpdc72babf_259e_4068_8f65_13101afe8968', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex19426386', '/tmp/BR2021ad_1584584_202060/publish_examples3/tpdc72babf_259e_4068_8f65_13101afe8968/directLookupTableND.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling rtwdemo_sfun_dlut3D ### Exit ### Start Compiling rtwdemo_sfun_dlut4D mex('-I/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex19426386', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp5e02334a_7851_4a64_93aa_c0908f35b351', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex19426386', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp5e02334a_7851_4a64_93aa_c0908f35b351/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
освободите 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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex14927435', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp6d56cb76_760f_453b_8a21_051a894f9b86', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples3/tp026926c6/ex14927435', '/tmp/BR2021ad_1584584_202060/publish_examples3/tp6d56cb76_760f_453b_8a21_051a894f9b86/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 (), использование 'инициализирует' как первый вход. После инициализации структуры присвойте ее свойства значениям, соответствующим унаследованному коду, являющемуся интегрированным. Прототип устаревших функций, названных в этом примере:
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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp6af2580b_8a65_4c58_b1e0_c3221c42c51f', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp6af2580b_8a65_4c58_b1e0_c3221c42c51f/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp555faf52_30a3_496c_ba92_62d542170b29', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp555faf52_30a3_496c_ba92_62d542170b29/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '-c', '-outdir', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp8e5d7fdc_f13c_4c67_82c5_01f22ad2dc83', '/mathworks/devel/bat/BR2021ad/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/BR2021ad/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2021ad_1584584_202060/publish_examples4/tp8ee346b5/ex74504488', '/tmp/BR2021ad_1584584_202060/publish_examples4/tp8e5d7fdc_f13c_4c67_82c5_01f22ad2dc83/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')