Měření času v debug - jak dlouho trvají bloky kódu?

Pre AVR toto funguje velmi dobre

youtube.com/watch?v=nPQl3e08vgg

amctools.com/vmlab.htm

vie sucasne simulovat niekolko MCU typu AVR v PC.

Meranie slucky tak ako bolo popisane nevidím ako úplne šťastné a to z toho dôvodu, že pokiaľ by rutina trvala stále rovnako, potom by stačilo spočítať inštrukcie a vedelo by sa presne koľko rutina trvá. Čas prevodu aj tak určuje užívateľ nastaveniami časovania.

Vzhľadom k tomu, že do procesov často vstupujú rôzne prerušenia, ktorých prejavy sa ťažko odhadujú, za lepšie riešenie ako merať frekvenciu (napríklad merákom, ktorý prevádza frekvenciu na napätie a až to meria už vôbec nie), za lepšie riešenie považujem nasledovné.

Pri behu mcu je použitý nejaký čítač pre presné časovanie procesov.
Časovač treba nastaviť tak, aby v pracovnom čítači (8b/16b) bol rozdiel daný jedným bitom dostatočne jemný.

Na začiatku rutiny si program odpamätá stav tohto pracovného čítača. Na konci rutiny od aktuálnej hodnoty pracovného čítača odpočíta stav na začiatku. Rozdiel určuje čas s presnosťou na LSB pracovného čítača. Z takto získanej hodnoty sa dá ľahko vyhodnotiť priemerná hodnota. Stačí plávajúci priemer, alebo jednoduchý filter typu:

STARA_PRIEM_HODNOTA = (NOVA_HODNOTA + STARA_PRIEM_HODNOTA) / 2;

Toto hyhodnotenie sa podobá na to meranie frekvencie

Ale asi výpovednejšie bude sledovať maximálnu hodnotu behu rutiny.

if (MAX_HODNOTA < NOVA_HODNOTA) MAX_HODNOTA = NOVA_HODNOTA;

tieto hodnoty treba načítať cez UART. Vyhodnotenie síce pridá nejaký ten kód (a čas) navyše, ale tento je prísne determenistický a dá sa ľahko od nameraného výsledku odpočítať.