Profiler je chytrý pomocník, který sleduje, jak dlouho co trvá. V základním režimu ti řekne:
„Celý model běžel 2,4 milisekundy.“
Ale v tomto článku si představíme, jak si změřit jen jednu konkrétní část modelu (např. jeden subsystém). Tato funkce je velmi nápomocná právě třeba při hledání, co konkrétního systém zpomaluje.
V předchozím článku jsem se věnoval využití Profileru pro časovou analýzu procesů běžících na dané platformě. Ukázali jsme si, jak plánovač úloh rozděluje výpočetní výkon mezi jednotlivé úlohy, jak pracuje s prioritami a další související aspekty. Dnes bych se chtěl zaměřit na jednu méně často využívanou, ale užitečnou funkci Profileru.
Na obrázku (obr.1) je typický výstup z programu. Na řádcích pod sebou je zobrazena aplikace (Periodic Task 1) a Bus komunikace (Bus Configuration). Na ose X je čas. Změřit výpočetní čas je otázka pár kliknutí. Známe tedy kolik času je potřeba na spočítání celého modelu.
Pokud bych chtěl zjistit kolik času zabere výpočet konkrétní části modelu, postupoval bych následovně:
Nastavení ExportedGlobal se věnují zde Data Store Memory
A = dsProfilerCreateSource(„Subsystem“);
A…jméno proměnné musí být identické s tím, které jsem zvolil v Data Store Memory
(„Subsystem“)…Název který uvidím v Profileru
System Outputs Function Declaration Code
extern uint16_T A;
System Outputs Function Execution Code
dsProfilerWriteEvent(A, UserTimespanStart, 0, 0);
System Outputs Function Exit Code
dsProfilerWriteEvent(A, UserTimespanEnd, 0, 0);
Model rozšířený o nové bloky „zbuildujeme“ a nahrajeme na platformu. V Profileru přibude nový řádek, který nás informuje, kolik času zabral výpočet měřeného subsystému.
Nyní už víte, jak měřit výpočetní čas i u konkrétního subsystému – praktická funkce, kterou se vyplatí mít v rukávu při ladění modelu.
Pro další informace a konzultace kontaktujte Tomáše Fridricha:
Tomáš Fridrich, 7.8.2025