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.
Pět způsobů a jejich cena
| metoda | cena | rozlišení | kdy |
|---|---|---|---|
| čítač taktů (DWT) | ~4 takty | jeden takt | vždycky, když ho čip má |
| překlopení pinu | ~8 taktů | hrana na osciloskopu | když se měří kdy, ne jak dlouho |
| čtení časovače | ~12 taktů | takt časovače | na 8bitových čipech bez DWT |
| SysTick v ms | ~20 taktů | celá milisekunda | na 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ě.