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.

Latence přerušení: kdo doopravdy zdržuje

Katalog uvádí dvanáct taktů. Na 168 MHz je to sedmdesát nanosekund a vypadá to jako vyřešená věc. V reálném zařízení bývá skutečná latence stokrát větší, a ten rozdíl nemá s čipem nic společného.

vstuptělood události k návratu z obsluhy1,36 µsprvní instrukce obsluhysynchronizace12 ns0,9 %vstup101 ns7,4 %tělo1190 ns87,3 %návrat60 ns4,4 %z toho hardware čipu: 8,3 %k první instrukci: 113 nsnejvyšší možná četnost: 734 kHzzdržuje software, ne křemík
Cesta od události k návratu z obsluhy, po částech. Nastav zakázaná přerušení na 10 µs a sleduj, co se stane s podílem hardwaru.

Šest sčítanců, z toho dva jsou tvoje

úsektypickyčí to je
synchronizace vstupu1–2 taktykřemík
zakázaná přerušení0 až desítky µstvůj kód
běží vyšší priorita0 až desítky µstvůj návrh
uložení kontextu a skok12 taktů + čekací stavykřemík
tělo obsluhydesítky až tisíce taktůtvůj kód
návrat~10 taktůkřemík

Nález, který je vidět hned v obrázku: stačí jediná kritická sekce dlouhá deset mikrosekund a hardwarová část klesne pod dvě procenta celku. Zrychlit čip desetkrát pak zkrátí latenci o pár procent — protože se nezkrátí to, co ji tvoří. Rychlejší procesor nespraví návrh, který zakazuje přerušení.

Kde se přerušení zakazují, aniž by to bylo vidět

  • V knihovnách. Zápis do flash, přepnutí kontextu v RTOS, alokace paměti, některé HAL funkce.
  • V kritických sekcích, které tam patří. Čtení 32bitové proměnné, do které píše obsluha, na 8bitovém čipu.
  • V ladicím výpisu. Blokující printf po UART na 115 kBd je osmdesát mikrosekund na znak — a je-li ve zbytku kódu, latence je v milisekundách.

Čekací stavy flash

Na rychlém čipu je flash pomalejší než jádro, takže se čte s čekacími stavy — u 168 MHz jich je pět. Skok do obsluhy je skok na adresu, která není v cache, takže se těch pět stavů zaplatí. Je to malé číslo, ale je to důvod, proč se kritické obsluhy někdy překládají do RAM.