Оптимизируйте сгенерированный код при помощи нескольких заменяющих библиотек кода

Можно сгенерировать код, которому включили замены кода несколько заменяющих библиотек кода. Можно выбрать несколько библиотек Code Replacement в объединенном рабочем процессе так, чтобы сгенерированный код содержал оптимизацию от варьировавшихся заменяющих библиотек кода, таких как AUTOSAR 4.0 и GNU C99 extensions. Можно также выбрать собственные заменяющие библиотеки кода наряду с библиотеками, включенными с Embedded Coder, чтобы далее оптимизировать сгенерированный код. Вы можете выбрать и использовать комбинацию библиотек и достигнуть необходимых функциональностей и не должны создавать отдельные библиотеки. В экземплярах, где существует несколько заменяющих библиотек пользовательского кода и вы нуждаетесь в функциональностях от всех них, индивидуально выбираете библиотеки.

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

В этом примере показано, как заменить сгенерированный код для модели, содержащей блок Add и блок Abs при помощи нескольких заменяющих библиотек кода. Вы заменяете блок Abs с помощью заменяющей индивидуальной настройки кода, которая заменяет регулярный fabs функция с пользовательской реализацией CRL_abs_d от ScalarFcn библиотека. Вы заменяете блок Add на пользовательскую реализацию CRL_d_add_d_d_cao от ScalarOp библиотека.

Откройте модель mMultiLibrary_abs это имеет блок Add и блок Abs.

model = 'mMultiLibrary_abs';
open_system(model);

copyfile multipleFnRtwTargetInfo.txt rtwTargetInfo.m

Файлы настройки MATLAB hcrl_make_abs и hcrl_sum_float были уже выполнены. Запустите функцию sl_refresh_customizations, чтобы указать библиотеки ScalarFcn и ScalarOp.

sl_refresh_customizations;

Выберите Code Replacement Libraries

  1. Откройте диалоговое окно Configuration Parameters.

  2. В диалоговом окне Configuration Parameters, набор Поставщик правильного устройства и Тип устройства в зависимости от аппаратной цели. В этом примере Intel Поставщик Устройства и x86-64(Windows64) Тип устройства.

  3. На Интерфейсной панели, установленном Заменяющем параметре Библиотеки Кода путем нажатия на Select и добавления заменяющих библиотек кода в Выбранные заменяющие библиотеки кода - приоритизированная панель списка. В данном примере выберите ScalarFcn и ScalarOp. Библиотеки работают над платформами Windows. Пользователи Linux должны предоставить различную библиотеку.

  4. Закажите заменяющие библиотеки кода согласно приоритету, в котором вы хотите видеть их замененный в сгенерированном коде. Заменяющие библиотеки кода во главе порядка имеют более высокий приоритет во время замены кода.

В качестве альтернативы используйте API командной строки, чтобы включить замену кода:

set_param('mMultiLibrary_abs','CodeReplacementLibrary','ScalarFcn,ScalarOp')

Сгенерируйте код для модели.

evalc('slbuild(model)');

ПРИМЕЧАНИЕ: При регистрации заменяющей библиотеки кода, вы не можете использовать запятую на заменяющее имя библиотеки кода.

Просмотрите сгенерированный код с заменами. Вот фрагмент mMultiLibrary_abs.c.

cfile = fullfile('mMultiLibrary_abs_ert_rtw','mMultiLibrary_abs.c');
rtwdemodbtype(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void mMultiLibrary_abs_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out1' incorporates:
   *  Abs: '<Root>/Abs1'
   *  Inport: '<Root>/In1'
   */
  mMultiLibrary_abs_Y.Out1 = CRL_abs_d(mMultiLibrary_abs_U.In1);

  /* Outport: '<Root>/Output' incorporates:
   *  Inport: '<Root>/In2'
   *  Inport: '<Root>/In3'
   *  Sum: '<Root>/Add'
   */
  for (i = 0; i < 2500; i++) {
    mMultiLibrary_abs_Y.Output[i] = CRL_d_add_d_d_cao(mMultiLibrary_abs_U.In2[i],
      mMultiLibrary_abs_U.In3[i]);
  }

  /* End of Outport: '<Root>/Output' */
}

Сгенерированный код содержит CRL_abs_d функция включена заменяющей библиотекой ScalarFcn пользовательского кода. Обратите внимание на то, что эта библиотека только работает на Windows. Код также содержит функциональный CRL_d_add_d_d_cao включенный ScalarOp заменяющая библиотека кода. Выбор нескольких заменяющих библиотек кода включает несколько оптимизации в сгенерированном коде.

Закройте отчет генерации кода и модель.

delete ./rtwTargetInfo.m
bdclose(model)
rtwdemoclean;

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

  • Когда вы используете различные типы аргумента, такие как матрица и скаляр, упорядочение по приоритетам проигнорировано. Заменяющая библиотека матрицы A кода имеет более высокий приоритет, чем скалярная заменяющая библиотека кода, независимо от порядка, заданного заменяющей библиотекой кода.

  • Когда заменяющий параметр библиотеки кода задает Стандартную Математическую Библиотеку, например, через ее BaseTfl, и он не совпадает со Стандартным Математическим параметром Библиотеки, библиотекой, заданной Стандартным Математическим параметром Библиотеки, пользуются.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте