memset ФункцияВ этом примере показано, как оптимизировать созданный код с помощью memset для очистки внутреннего хранилища. При выборе параметра конфигурации модели Use memset to initialize floats и doubles to 0.0, memset функция очищает внутреннее хранилище до целочисленного битового шаблона 0 (то есть все биты выключены).
Если компилятор и целевой процессор представляют собой ноль с плавающей запятой с целочисленным битовым шаблоном 0рассмотрите возможность установки этого параметра для повышения эффективности выполнения и ПЗУ.
ПРИМЕЧАНИЕ: Значения командной строки являются противоположными значениям настроек. «on» в командной строке соответствует сбросу параметра. 'off' в командной строке соответствует выбору параметра.
Эта оптимизация:
Уменьшает потребление ПЗУ.
Повышает скорость выполнения.
Рассмотрим модель matlab:rtwdemo_memset.
model = 'rtwdemo_memset';
open_system(model);

Генератор кода использует цикл для инициализации Constant значения блоков.
Создайте временную папку (во временной папке системы) для процесса сборки и контроля.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== rtwdemo_memset Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 10.531s
Просмотр созданного кода без оптимизации. Эти строки кода находятся в rtwdemo_memset.c.
cfile = fullfile(cgDir,'rtwdemo_memset_grt_rtw','rtwdemo_memset.c'); rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */
void rtwdemo_memset_initialize(void)
{
/* Registration code */
/* initialize error status */
rtmSetErrorStatus(rtwdemo_memset_M, (NULL));
/* external outputs */
{
int32_T i;
for (i = 0; i < 50; i++) {
rtwdemo_memset_Y.Out1[i] = 0.0;
}
}
{
int32_T i;
/* ConstCode for Outport: '<Root>/Out1' */
for (i = 0; i < 50; i++) {
rtwdemo_memset_Y.Out1[i] = 56.0;
}
/* End of ConstCode for Outport: '<Root>/Out1' */
}
}
Откройте диалоговое окно «Параметры конфигурации».
В диалоговом окне «Параметр конфигурации» выберите параметр Use memset to initialize floats и doubles to 0.0. Кроме того, для оптимизации можно использовать API командной строки:
set_param(model,'InitFltsAndDblsToZero','off'); % # Open the Configuration Parameters dialog box.
Генератор кода использует memset для инициализации Constant значения блоков.
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================== rtwdemo_memset Code generated and compiled Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.655s
Просмотр созданного кода с оптимизацией. Эти строки кода находятся в rtwdemo_memset.c.
rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */
void rtwdemo_memset_initialize(void)
{
/* Registration code */
/* initialize error status */
rtmSetErrorStatus(rtwdemo_memset_M, (NULL));
/* external outputs */
(void) memset(&rtwdemo_memset_Y.Out1[0], 0,
50U*sizeof(real_T));
{
int32_T i;
/* ConstCode for Outport: '<Root>/Out1' */
for (i = 0; i < 50; i++) {
rtwdemo_memset_Y.Out1[i] = 56.0;
}
/* End of ConstCode for Outport: '<Root>/Out1' */
}
}
Закройте модель и отчет о создании кода.
bdclose(model) rtwdemoclean; cd(currentDir)
Используйте memset для инициализации поплавков и двойников до 0.0