В этом примере показано, как использовать блок Log Event, вставляет пользовательское событие в поток событий профилирования выполнения. Для получения дополнительной информации о профилировании выполнения смотрите Профилирование выполнения для приложений реального времени.
Чтобы открыть модель, в Командном Окне MATLAB, введите:
open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_log_event'));
mdl = 'slrt_ex_log_event'; mdlOpened = 0; systems = find_system('type', 'block_diagram'); if ~any(strcmp(mdl, systems)) mdlOpened = 1; open_system(fullfile(matlabroot,'toolbox','slrealtime','examples',mdl)); end
Откройте диалоговое окно Параметры конфигурации. Выберите Генерация Кода > верификация.
Для параметра времен выполнения функции измерения выберите Подробно (все узлы вызова функции). Флажок Время выполнения задачи измерения установлен и заблокирован. Нажмите кнопку ОК.
Или в командном окне MATLAB введите:
set_param('slrt_ex_log_event','CodeProfilingInstrumentation','Detailed');
Создайте модель и загрузите ее на целевой компьютер.
evalc('slbuild(mdl)');
tg = slrealtime;
load(tg,mdl);
Запустите профилировщик, а затем выполните приложение реального времени.
startProfiler(tg); start(tg); pause(20) stopProfiler(tg); stop(tg);
Warning: Profiler already stopped. Command ignored.
Получите данные профилировщика. Отображение пользовательского события в таблице.
profiler_data = getProfilerData(tg); profiler_data.EventTrace.etData
Processing data on target computer ... Transferring data from target computer ... Processing data on host computer ... ans = 2×6 table Channel Timestamp Event Value CPU ModelTime _______ ________________ _____ _____ ___ _________ 500 3545275820041720 200 200 1 2 1000 3545280320044224 100 700 1 6.5
График «Профиль выполнения» показывает распределение циклов выполнения по четырем процессорам, обозначенное цветными горизонтальными полосами. Разделы модели перечислены в Отчете о профилировании выполнения кода. Ядра обозначаются номерами под полосками.
Закройте модель, если она открыта.
if (mdlOpened) bdclose(mdl); end