Сгенерируйте Код для Блоков Строки при помощи Стандарта Библиотека Строки C++

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

Модель в качестве примера

В модели matlab:mStrfindSubStr, блок строковой константы, который имеет значение "Привет!" подключения к str порт блока String Find. Импорт соединяется с sub порт того же блока String Find.

model = 'mStrfindSubStr';
open_system(model);

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

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

Сгенерируйте Код при помощи Библиотек Строки C++

В диалоговом окне Configuration Parameters, установленном параметр Языка на C++.

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

В диалоговом окне Configuration Parameters, установленном интерфейс Code упаковочный параметр на C++ class.

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

В диалоговом окне Configuration Parameters, установленном Стандартный математический параметр библиотеки на C++03 (ISO).

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

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

evalc('rtwbuild(model)');

Просмотрите сгенерированный код с объектами библиотеки строки C++. Вот фрагмент mStrfindSubStr.h. Код инстанцирует std:string объекта In1.

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

Просмотрите сгенерированный код с библиотечными функциями строки 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, не поддержан в симуляциях процессора в цикле (PIL) и программном обеспечении в цикле (SIL).

Похожие темы