McuLab jediný zdroj v čipu jsou takty

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Jak se to změří

Všechny předchozí kapitoly počítaly takty. Zbývá otázka, jak zjistit, kolik jich to doopravdy je — protože odhad z počtu instrukcí se netrefí nikdy: čekací stavy flash, cache, zarovnání a sběrnice z toho udělají jiné číslo.

měřený úsek600 taktůcena měření4 taktůčítač taktů (DWT) — rozlišení jeden taktměření nic nezkreslí (0,7 %)rozlišení stačíměření mění to, co měří
Modrý pruh je měřený úsek, druhý je cena měření. Vyber printf a sleduj, jak se z měření stane celý program.

Pět způsobů a jejich cena

metodacenarozlišeníkdy
čítač taktů (DWT)~4 taktyjeden taktvždycky, když ho čip má
překlopení pinu~8 taktůhrana na osciloskopukdyž se měří kdy, ne jak dlouho
čtení časovače~12 taktůtakt časovačena 8bitových čipech bez DWT
SysTick v ms~20 taktůcelá milisekundana dlouhé úseky
printf po UART~1 400 000 taktůnikdy uvnitř toho, co měříš

Měření mění to, co měří. Jeden printf po UART na 115 kBd trvá při deseti znacích skoro milisekundu — a když je uvnitř obsluhy přerušení, změří se něco úplně jiného než to, co tam bylo bez něj. Ta věta platí i o ladicím výpisu, který v kódu zůstal.

Co měřit a jak

  • Nejhorší případ, ne průměr. Rozvrh z kapitoly 4 stojí na WCET. Měřit hodinu a vzít maximum je pořád jen odhad zdola — ale odhad zdola z hodiny provozu je lepší než odhad z počtu instrukcí.
  • Jitter jako rozdíl, ne jako číslo. Pin překlopený na začátku a na konci obsluhy ukáže na osciloskopu v režimu perzistence celý rozptyl naráz. Je to nejrychlejší způsob, jak zjistit, že se občas něco vloží doprostřed.
  • Zatížení procesoru jednou hranou. Pin nahoru při vstupu do smyčky, dolů při čekání. Střída na osciloskopu je využití procesoru z kapitoly 7, měřené zadarmo a nepřetržitě.