Импортируйте вызовы внешнего кода в сгенерированный код с Legacy Code Tool

Legacy Code Tool и генерация кода

Можно использовать Simulink® Legacy Code Tool, чтобы сгенерировать полностью встроенные S-функции MEX C для наследия или пользовательского кода. S-функции оптимизированы для встроенных компонентов, таких как драйверы устройств и интерполяционные таблицы, и они вызывают существующий C или функции C++.

Примечание

Legacy Code Tool может взаимодействовать через интерфейс с функциями C++, но не объектами C++. Чтобы работать вокруг этой проблемы так, чтобы инструмент мог взаимодействовать через интерфейс с объектами C++, смотрите Ограничения Legacy Code Tool (Simulink).

Можно использовать инструмент для:

  • Скомпилируйте и создайте сгенерированную S-функцию для симуляции.

  • Сгенерируйте Блок s-function маскированный, который сконфигурирован, чтобы вызвать существующий внешний код.

Если вы хотите включать эти типы 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-файлы-функции для генерации кода

В зависимости от требований генерации кода вашего приложения, чтобы сгенерировать код для модели, которая использует 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

Вы не можете установить singleCPPMexFile поле к true если

  • Options.language='C++'

  • Вы используете один из следующих объектов Simulink с IsAlias набор свойств к true:

    • Simulink.Bus

    • Simulink.AliasType

    • Simulink.NumericType

  • Спецификация функции Legacy Code Tool включает void* или void** представлять скалярные данные о работе для аргумента состояния

  • HeaderFiles поле структуры Legacy Code Tool задает несколько заголовочных файлов

Примените параметры стиля кода к устаревшим функциям

Применять параметры конфигурации модели для стиля кода к устаревшей функции:

  1. Инициализируйте структуру данных Legacy Code Tool. Например:

    def = legacy_code('initialize');
    
  2. В структуре данных, установленной значение Options.singleCPPMexFile поле к true. Например:

    def.Options.singleCPPMexFile = true;

Проверять установку, введите:

def.Options.singleCPPMexFile

Ограничения 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-функций.

Разверните S-функции для симуляции и генерации кода

Можно развернуть S-функции, которые вы генерируете с Legacy Code Tool так, чтобы другие люди могли использовать их. Чтобы развернуть S-функцию для симуляции и генерации кода, совместно используйте следующие файлы:

  • Регистрационный файл

  • Скомпилированный динамически загружаемый исполняемый файл

  • Файл блока TLC

  • sFunction_makecfg.m или rtwmakecfg.m файл

  • Заголовок, источник, и включают файлы, от которых зависит сгенерированная S-функция

Когда вы используете эти развернутые файлы:

  • Перед использованием развернутых файлов в модели Simulink добавьте папку, которая содержит S-файлы-функции к пути MATLAB®.

  • Если структура данных Legacy Code Tool регистрирует требуемые файлы как абсолютные пути и местоположение изменений файлов, регенерируйте sFunction_makecfg.m или rtwmakecfg.m файл.

Интегрируйте внешние объекты C++

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, чтобы интегрировать наследие 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')

Интегрируйте внешние функции C, которые передают выходной аргумент как возвращаемый аргумент

В этом примере показано, как использовать 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++

Интегрируйте устаревшие методы объекта 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, которые передают аргументы ввода и вывода как параметры с типом данных с фиксированной точкой

Интегрируйте наследие 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')

Интегрируйте внешние функции C, которые передают аргументы ввода и вывода как сигналы с типом данных с фиксированной точкой

В этом примере показано, как использовать 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 со специфичной для экземпляра постоянной памятью

Интегрируйте наследие 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 та структура использования аргументы

Интегрируйте наследие 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, которые передают аргументы ввода и вывода как сигналы с комплексными данными

Интегрируйте наследие 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

Интегрируйте внешние функции C, которые передают аргументы, которые наследовали размерности

В этом примере показано, как использовать 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')

Интегрируйте внешние функции C, которые передают аргументы как многомерные сигналы

В этом примере показано, как использовать 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, что реализация запускает и отключает действия

Интегрируйте наследие 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-мерный поиск по таблице

Интегрируйте наследие 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')

Интегрируйте внешние функции C, которые передают аргументы как многомерные сигналы

В этом примере показано, как использовать 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, чтобы объединяться, наследие 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')

Смотрите также

Похожие темы