exponenta event banner

Создание кода для блоков строк с помощью стандартной библиотеки строк C++

Оптимизация созданного кода для строковых блоков Simulink с помощью стандартных строковых функций библиотеки C++ и строковых объектов. Библиотека строк C++ обеспечивает согласованный код C++ и улучшает функциональные возможности, такие как поиск длины строки, конкатенация, копирование строки, подстановка строки, сравнение строк и вычисления подстрок.

Пример модели

В модели matlab: mStrfindSubStr блок строковой константы, имеющий значение «Hello!», подключается к str порт блока поиска строк. Входной порт подключается к sub порт того же блока поиска строк.

model = 'mStrfindSubStr';
open_system(model);

Во временной папке системы создайте временную папку для процесса сборки и проверки.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

Создание кода с помощью библиотек строк C++

В диалоговом окне «Параметры конфигурации» задайте для параметра «Язык» значение C++.

set_param(model, 'TargetLang', 'C++');

В диалоговом окне Configuration Parameters установите для параметра Code interface packaging значение C++ class.

set_param(model, 'CodeInterfacePackaging', 'C++ class');

В диалоговом окне Параметры конфигурации (Configuration Parameters) задайте для параметра Библиотека формул (Standard math library) значение C++03 (ISO).

set_param(model, 'TargetLangStandard', 'C++03 (ISO)');

Создайте модель.

evalc('slbuild(model)');

Просмотр созданного кода с объектами библиотеки строк C++. Вот часть mStrfindSubStr.h. Код создает экземпляр объекта std: stringIn1.

cfile = fullfile(cgDir,'mStrfindSubStr_ert_rtw','mStrfindSubStr.h');
rtwdemodbtype(cfile,'External inputs','External outputs',0,0);
struct ExtU_mStrfindSubStr_T {
  std::string In1;                     // '<Root>/In1'
};

Просмотр созданного кода с помощью функций библиотеки строк C++. Вот часть mStrfindSubStr.cpp. Код использует find функция для поиска первого совпадения символов, которое присутствует в библиотеке строк C++.

cfile = fullfile(cgDir,'mStrfindSubStr_ert_rtw','mStrfindSubStr.cpp');
rtwdemodbtype(cfile,'Model step function','Model initialize function',0,0);
void untitled1ModelClass::step()
{
  uint32_T tmpOut;

  // StringFind: '<Root>/String Find' incorporates:
  //   Inport: '<Root>/In1'
  //   StringConstant: '<Root>/String Constant'

  tmpOut = mStrfindSubStr_P.StringConstant_String.find(mStrfindSubStr_U.In1);
  if (tmpOut == (uint32_T)std::string::npos) {
    // Outport: '<Root>/Out1'
    mStrfindSubStr_Y.Out1 = -1;
  } else {
    // Outport: '<Root>/Out1'
    mStrfindSubStr_Y.Out1 = static_cast<int32_T>(tmpOut) + 1;
  }

  // End of StringFind: '<Root>/String Find'
}

Этот код выполняется быстрее и легче для чтения. Закройте модель и отчет о создании кода.

bdclose(model);
rtwdemoclean;
cd(currentDir);

Ограничения:

Массив шины, содержащий std: string, не поддерживается в моделировании ПО в цикле (SIL) и процессора в цикле (PIL).

Связанные темы