BI-SAP.21 Struktura a architektura počítačů
Jdi na navigaci předmětu

Č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 cek

Nastavení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 cek2

Tato 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.
Nastavení frekvence v simulátoru

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.