DMA: nekupuje rychlost, kupuje takty
Přímý přístup do paměti se obvykle vysvětluje jako „rychlejší přenos“. Není. Přenos trvá zhruba stejně dlouho — jen ho nedělá procesor, a tím se uvolní jediná věc, které je v čipu málo.
Co DMA stojí
Nastavení kanálu je desítky taktů a je stejné pro čtyři bajty i pro čtyři kilobajty. Odtud bod, pod kterým se DMA nevyplatí — a je vyšší, než by člověk čekal: při šedesáti taktech nastavení a osmi taktech na bajt je to kolem osmi bajtů, ale při dvou taktech na bajt už kolem čtyřiceti.
Druhá položka je sdílení sběrnice: DMA sahá do téže paměti jako procesor a občas mu zabere takt. Nebývá to víc než patnáct procent, ale znamená to, že zrychlení je konečné i pro obrovský přenos — nikdy nevyjde nekonečno.
Kde se to v robotu vyplatí nejvíc
| kde | proč |
|---|---|
| ADC → paměť | vzorkuje se rychleji, než by stačilo přerušení; sekvence kanálů jde celá |
| SPI k enkodéru | desítky bajtů každou periodu smyčky, jinak by to bylo přerušení na bajt |
| UART příjem | kruhový buffer bez jediného přerušení, dokud nepřijde celá zpráva |
| PWM z tabulky | časovač si střídy bere sám — sinusovka bez zásahu jádra |
A jedna past, která se najde až na osciloskopu: DMA přenáší, když je připraveno, ne když se to hodí. Pokud přenos běží přes okamžik, kdy regulační smyčka čte data, čte je napůl přepsaná. Řešení je dvojitý buffer nebo přerušení „hotovo“ — ne kontrola příznaku, ta přijde vždycky o kousek pozdě.