Можно сгенерировать код, которому включили замены кода несколько заменяющих библиотек кода. Можно выбрать несколько библиотек 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;
Откройте диалоговое окно Configuration Parameters.
В диалоговом окне Configuration Parameters, набор Поставщик правильного устройства и Тип устройства в зависимости от аппаратной цели. В этом примере Intel
Поставщик Устройства и x86-64(Windows64)
Тип устройства.
На Интерфейсной панели, установленном Заменяющем параметре Библиотеки Кода путем нажатия на Select и добавления заменяющих библиотек кода в Выбранные заменяющие библиотеки кода - приоритизированная панель списка. В данном примере выберите ScalarFcn и ScalarOp. Библиотеки работают над платформами Windows. Пользователи Linux должны предоставить различную библиотеку.
Закажите заменяющие библиотеки кода согласно приоритету, в котором вы хотите видеть их замененный в сгенерированном коде. Заменяющие библиотеки кода во главе порядка имеют более высокий приоритет во время замены кода.
В качестве альтернативы используйте 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, и он не совпадает со Стандартным Математическим параметром Библиотеки, библиотекой, заданной Стандартным Математическим параметром Библиотеки, пользуются.