Čekací smyčky
Čekací smyčka je jednoduchý nástroj, jak v mikroprocesoru měřit čas. Jedná se o základní metodu busy waiting, což nám však pro začátek postačí. Vhodným řešením je použití smyček/cyklů/loopů, kde se neprovádí žádný užitečný výpočet, ale samotné instrukce pro skoky a snižování čítače stojí takty procesoru. Čekací smyčka je jedním z vhodných kandidátů pro zavolání podprogramu.
Následující smyčka provede 120 krát "nic", takže se procesor zdrží cca o 360 taktů. Frekvence procesoru je v našem případě 16 MHz, takže program se průchodem touto smyčkou zdrží o cca 22 us.
ldi r20, 120
cek:
dec r20
brne cekNastavením konstanty lze smyčku prodloužit/zkrátit.
Pokud bychom potřebovali delší zdržení, můžeme smyčku volat vícekrát, nebo ji zabalit do další smyčky:
ldi r21, 33
cek2:
ldi r20, 120
cek:
dec r20
brne cek
dec r21
brne cek2Tato smyčka se provedla (33*120) krát, takže se procesor zdrží cca o 12000 taktů (cca 750 us).
Samozřejmě je možno zabalit smyčku i třikrát, což umožní nastavit zpoždění až na cca 3 sekundy.
Pokud byste chtěli nastavit smyčku na konkrétní hodnotu, tak můžete použít následující odhad:
pocet-taktu = (opakovani-vnitrni * 3) * opakovani-2-zabaleni * opakovani-3-zabaleni
trvani [v sekundach] = pocet-taktu / (16*10^6)
Pro ověření délky trvání smyčky můžete použít i simulátor. Nejprve nastavte frekvenci procesoru na 16 MHz:
- Klikněte pravým tlačítkem na název projektu v levé části na kartě Projects a vyberte volbu Properties.
- V levé části pak vyberte řádek Simulator a v pravé nastavte Instruction Frequency (Fcyc) na hodnotu 16 a zkontrolujte, jestli je hodnota Frequency In nastavená na MHz.
Dále nastavte breakpointy na začátek a za konec smyčky a poté na kartě Stopwatch (Window > Debugging > Stopwatch) můžete sledovat počty taktů a časy tak, jak by to viděl reálný procesor. Pokud použijete krokování a provede se pouze jedna instrukce (žádný podprogram apod.), tak se počty taktů a časy postupně inkrementují, pokud se provede více instrukcí (např. pomocí Continue, nebo podprogramu), tak se zobrazují počty taktů a časy od posledního zastavení programu.
