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

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

  • Скомпилируйте и создайте сгенерированную 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.

Сгенерируйте встроенные 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' должно быть характерно для всех регистрационных файлов. Для получения дополнительной информации смотрите Обработку Нескольких Регистрационных Файлов.

Например, если вы задаете 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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex19632214', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp8629f6aa_aaab_493b_bf86_312f2258cdf3', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex19632214', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp8629f6aa_aaab_493b_bf86_312f2258cdf3/filterV1.o')
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling rtwdemo_sfun_filterV1
### Exit

### Start Compiling rtwdemo_sfun_filterV2
    mex('-I/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex19632214', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp2ce16aa4_a166_4e24_a570_eca0ce83cf3c', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex19632214', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp2ce16aa4_a166_4e24_a570_eca0ce83cf3c/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex09148220', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp03b47cf5_860e_4f7e_b406_ba1b18e07a49', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex09148220', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp03b47cf5_860e_4f7e_b406_ba1b18e07a49/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples5/tpffbcdbd5/ex06428671', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples5/tpe277eaa2_14e0_4641_b664_101a9461dbb7', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples5/tpffbcdbd5/ex06428671', '-cxx', '/tmp/BR2020bd_1444674_32127/publish_examples5/tpe277eaa2_14e0_4641_b664_101a9461dbb7/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex05928773', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp2fe33ffa_d0b0_44f7_97d7_a574ca8f0239', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex05928773', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp2fe33ffa_d0b0_44f7_97d7_a574ca8f0239/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex96454812', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp154a316d_c27b_49b9_8a50_674b508a0f69', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex96454812', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp154a316d_c27b_49b9_8a50_674b508a0f69/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex38707886', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp52e518b8_0936_44e4_b44a_1a08671a6714', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex38707886', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp52e518b8_0936_44e4_b44a_1a08671a6714/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex90330074', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpe762068f_cfa8_446d_954b_4033086b62d1', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex90330074', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpe762068f_cfa8_446d_954b_4033086b62d1/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex97344681', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp32ab16e2_9c53_44e6_b07e_c3ed7c75084b', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex97344681', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp32ab16e2_9c53_44e6_b07e_c3ed7c75084b/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex89794148', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp0659194c_6a79_4833_bf0b_e5978c47a333', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex89794148', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp0659194c_6a79_4833_bf0b_e5978c47a333/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex89794148', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp7d643fe6_fe73_4ea3_b85d_88153be327da', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex89794148', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp7d643fe6_fe73_4ea3_b85d_88153be327da/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex14927435', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3a6c6226_579a_46c4_8d98_5d88aa4c086c', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex14927435', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3a6c6226_579a_46c4_8d98_5d88aa4c086c/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex46254423', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3d561476_ee5b_4181_982d_97a41c95d658', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex46254423', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3d561476_ee5b_4181_982d_97a41c95d658/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex19426386', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3dd5a96e_2727_497b_8db0_07a1d381b463', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex19426386', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3dd5a96e_2727_497b_8db0_07a1d381b463/directLookupTableND.o')
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling rtwdemo_sfun_dlut3D
### Exit

### Start Compiling rtwdemo_sfun_dlut4D
    mex('-I/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex19426386', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp7ddd68d9_303d_49f0_8dfa_83070418100a', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex19426386', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp7ddd68d9_303d_49f0_8dfa_83070418100a/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex14927435', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3a6c6226_579a_46c4_8d98_5d88aa4c086c', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples3/tpc17c1213/ex14927435', '/tmp/BR2020bd_1444674_32127/publish_examples3/tp3a6c6226_579a_46c4_8d98_5d88aa4c086c/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpe513beca_1fca_49e5_818c_50ef8b260311', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpe513beca_1fca_49e5_818c_50ef8b260311/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpf8bb27f1_d976_470c_aba2_f16668bffefc', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '/tmp/BR2020bd_1444674_32127/publish_examples4/tpf8bb27f1_d976_470c_aba2_f16668bffefc/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '-c', '-outdir', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp6b224eb4_9922_463c_bb9e_9451619e5d6d', '/mathworks/devel/bat/BR2020bd/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/BR2020bd/build/matlab/toolbox/rtw/rtwdemos/rtwdemo_lct_src', '-I/tmp/BR2020bd_1444674_32127/publish_examples4/tp827cd831/ex74504488', '/tmp/BR2020bd_1444674_32127/publish_examples4/tp6b224eb4_9922_463c_bb9e_9451619e5d6d/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')

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

Похожие темы