Funkcija
"Trace" je močno orodje, ki je namenjeno sledenju programa med
izvajanjem in odkrivanju napak v programu.
Uporabljamo
jo, ko želimo spremljati potek izvajanja programa, bodisi v vseh zaporednih
korakih izvajanja ali pa le opazovati dogajanje na posameznih naslovih, branje
ali vpis le določenih vsebin na podatkovnem vodilu, ko želimo izsejati le določene
bralne ali vpisovalne cikle.
V
pomnilnik se shranjujejo vzorci (posnetki) stanj s podatkovnega, naslovnega in
krmilnega vodila od začetka sledenja določenega s trigger-jem, pa vse dokler
ne prekinemo izvajanja programa. Shranjujejo se le vzorci, določeni s
"qualifier"-jem.
Vsi
izpisi so v heksadecimalni obliki.
"Trace"
funkcija nima vpliva na izvajanje programa!
Njena
naloga je, da izvaja, izbira in zbira (vzorči) določene zaporedne posnetke
vsebin na podatkovnem, naslovnem in krmilnem vodilu mikrokontrolerja. Uporablja
se za logično analizo delovanja mikrokontrolerja.
Z
uporabo funkcije "Trace" enostavno razberemo zaporedje dogajanja na
vodilih, spremljamo spreminjanje vrednosti izbranih spremenljivk, itd.
Funkcijo
sledenja (Trace) vključimo z zaznamovanjem v polju "Trace
ON/OFF". Pred novim sledenjem tudi izbrišemo vse vsebine prejšnjega
sledenja s pritiskom gumba "Brisi
Trace".
"Trigger"
- proženje
"Trigger"
funkcija omogoča nastavitev pogojev, pri katerih se sproži (prične) sledenje.
Na tem mestu vpišemo naslov, podatke in stanje R/W signala, ki jih poznamo iz
programa in se nam zdijo zanimivi in primerni. Ti določajo dogodek v programu
ali v pomnilniku, ko se začne izvajati funkcija sledenja.
Določimo
lahko več takih pogojev, če ne vemo natančno, skozi katere odseke programa bo
sledil potek programa in v kakšnem zaporedju. Več pogojev za proženje je
povezanih med seboj s funkcijo ALI (OR).
Vnos
je v heksadecimalni obliki, le R/W lahko zavzame samo eno od dveh vrednosti:
R za branje in W za vpis v pomnilnik oz. vhodno/izhodne enote (ni dovoljen vnos
x!).
Znak
x, s katerim lahko nadomestimo heksadecimalno števko, pomeni, da na tistem
mestu pride do proženja pri kakršnikoli vrednosti.
Primer:
Naslov | Podatek | R/W |
F108 | xx | R |
120x | xx | W |
V
zgornjem primeru se bo pričelo sledenje programu bodisi, če bo izvajanje
programa prešlo naslov $F108, s katerega bo procesor bral vsebino, ali pa, če
bo procesor vpisal kakršnokoli vsebino na katerega od naslovov začenši z
naslovom $1200 pa do $120F.
"Qualifier"
- opredelitev
"Qualifier"
funkcija izseje (izbere) iz vsebin na vodilih mikrokontrolerja le točno določene
vzorce.
Ti so zanimivi za obravnavo in se pojavljajo na vodilih potem, ko se je pričelo
sledenje programu (po pojavu pogojev določenih s trigger-jem).
Namen
te funkcije je, da se čimbolj omeji oz. zoži izbor zajetih vzorcev. Tako ima
uporabnik boljši pregled nad dogajanjem in lažje delo pri pregledovanju, saj
se omeji le na pregledovanje tistih vsebin, ki ga zanimajo.
Z
določitvijo naslovov, vsebin in R/W stanja v polju "Qualifier" določimo
le tiste vzorce, ki jih bo sledilnik izločal in shranjeval za kasnejšo analizo.
Določimo
lahko več qualifier-jev, če nas zanima dogajanje pri več različnih pogojih
na vodilih. Med seboj so povezani s
funkcijo ALI (OR).
Vnos
je lahko v heksadecimalni obliki, le R/W lahko zavzame vrednost R za branje in W
za vpis v pomnilnik oz. vhodno/izhodne enote. Znak x namesto heksadecimalne števke
pomeni, da na tistem mestu pride do vpisa vzorca v sledilnik pri kakršnikoli
vrednosti.
Primer:
Naslov | Podatek | R/W |
1000 | xx | R |
101x | 00 | W |
V
navedenem primeru se bo v pomnilnik prenesel vsak vzorec ki se pojavi na
vodilih, če bo prišlo do branja z naslova $1000 ali pa ko bo prišlo do vpisa
vsebine $00 na kateregakoli od naslovov od $1010 do $101F.
Če nas zanima izvajanje programa in sledenje brez omejevanja naslovov in podatkov, vpišemo xxxx na mestu namenjenem za vpis naslova in xx za določitev podatka. Vpisov R in W pa ne moremo združiti z x ampak vpišemo dva qualifier-ja: v prvem primeru z vnosom izbire R v polju R/W in v drugem z vpisom izbire W v tem polju. Tako smo pokrili vse možnosti, ki se pojavljajo na vodilih. V takem primeru qualifier izseje vse vzorce. Opraviti imamo s primerom kot da ne bi imeli funkcije qualifier-ja.