Fórum témák

» Több friss téma
Cikkek » PicKit3 Debug Express - Tananyag kezdőknek II.rész
PicKit3 Debug Express - Tananyag kezdőknek II.rész
Szerző: zimpee, idő: Okt 25, 2011, Olvasva: 12156, Oldal olvasási idő: kb. 5 perc
Lapozás: OK   5 / 5

Ebben a leckében megtanuljuk a PICkit3 ICD-jét (In-Circuit Debuggerét) használni. Ugyanazon az MPLAB IDE projekten fogunk dolgozni, mint az 5. leckében, így itt nem kell letöltenetek semmit, csak nyissátok meg a projekt fájlt a programban.

Megtanuljuk:
- az ICD használatát a debugolás engedélyezésével. Ezzel tulajdonképpen lefoglalunk néhány fájlregisztert (R-rel jelöltek) és programmemória helyet, melyeket nem használhatnak a programjaink, csak a debugger;
- Megértjük a debuggolás folyamatát, a program futtatását, megállítását, léptetését és a töréspontokat;

Először is állítsuk vissza a Timer0 előosztóját 1:1 arányra!

A lefoglalt erőforrások:
A debugger bizonyos perifériákat, erőforrásokat lefoglal magának, ezeket nem tudjuk használni debuggolás alatt. Elveszi tőlünk az MCLR lábat, a PGD és PGC lábakat, így ezeket nem érjük el a későbbiekben I/O célokra. Egy stacket is lefoglal magának, de természetesen ezeket visszakapjuk, ha nem debug módban vagyunk.

"Elveszítünk" továbbá némi program- és adatmemóriát is, ezek R-rel vannak jelölve, bármikor megnézhetjük Őket MPLAB IDE-ben.

Lássuk!

A PICkit3 nem lehet programozó és debugger egyszerre, így, ha programozóként választottuk ki, és debug módba állítjuk, kikapcsolja a programozó lehetőséget. Debug módba kapcsoláshoz kattintsunk a Debugger>Select Tool>x PICkit3 menüpontra. Az Output ablakban láthatjuk, hogy létrejött-e a kapcsolat a vezérlővel.

A debugoláshoz a projekt konfigot Release-ről Debug-ra kell állítani az eszköztáron. Fordítsuk le és égessük be a projektet (Project>Build All; Debugger>Program), majd kattintsunk a Debugger>Run-ra, hogy elindítsuk a vezérlőn a programunk futását.

Alapvető műveletek

HALT:

A PIC18F45K20 az ötödik lecke anyagát debug módban futtatja. A futtatás megállítható a Debugger>Halt(F5) menüponttal. Egy zöld nyíl fog megjelenni a szerkesztőnkben a bal oldalon, és a soron következő utasításra mutat.
Itt egy minta kép, a Te programod valószínűleg máshol állt meg, de ennek nincs jelentősége.

STEP:

A lépés, vagy léptetés segítségével rávesszük a programunkat arra, hogy egy megnyomásra csak egy utasítást hajtson végre. 3 lehetőségünk van:
 - Step Into
    Ezzel egyesével végiglépünk az utasításokon, amíg egy függvényhíváshoz nem érünk. Ha a Step Into-t használjuk, akkor belépünk a függvénybe, és meghívjuk az első utasítását. Gyorsbillentyű: F7.


   
 - Step Over

    Ezzel is egyesével léphetünk végig az utasításokon, de ha függvényhívás történik, az megállás nélkül lefut, és a debugger a visszatérés utáni első sorra ugrik. Ergo, nem lépünk be a függvénybe. Gyorsbillentyű: F8.

   

   

 - Step Out
    A Step Out végigcsinálja az adott függvény hátralevő hívásait, és a függvény hívása utáni első utasításra ugrik.
   
RUN:

A Debugger>Run (F9) menüpont elindítja a program futását, és az addig fut, amíg a felhasználó meg nem állítja, vagy törésponthoz nem érkezett.

RESET:

A Debugger>Reset>Processor Reset (F6) segítségével teljesen újraindítjuk a mikrovezérlőt, így a programunk teljesen előlről indulhat. A Reset csak akkor elérhető, ha a programunk nem fut.

Állítsuk meg a PIC-ünket, ha fut, majd Reseteljük! Ezzel megnyílik egy új ablak MPLAB-ban (c018i.c), ami az MPLAB C könyvtár része, és az indítókódot tartalmazza. Ebben inicializáljuk a C Software Stacket, rendeljük hozzá a megfelelő értékeket a változókhoz, majd ugrunk a main() kezdőutasítására.


Töréspontok:
Debugoláskor töréspontot adhatunk egy utasításhoz, így a program futása megáll az adott parancsnál.
Az MPLAB IDE 05 Timer.c forrásának ablakában menjünk a 111. sorra (SwitchPressed = TRUE, és kattintsunk rá jobb gombbal. Set Breakpoint a mi menüpontunk, kattintsunk rá! Megjelenik egy piros nyolcszög a sor mellett, benne egy B betűvel.



A töréspontot a gomb megnyomásának érzékelőjéhez tettük, tehát akkor fog megállni a programunk, ha megnyomtuk a gombot. A Debugger>Run-nal indítsuk el a programot, majd kis idő múlva nyomjuk meg a gombot. A program megáll, és innen F8-cal végigléphetünk a kódon.



A beállítható töréspontok száma kontrollerfüggő. A Debugger>Breakpoints menüponttal megnyithatjuk a töréspontok párbeszédablakát, ahol a jelenleg beállított töréspontokat látjuk. A Silicon Debug eszköztáron láthatjuk az elérhető töréspontokat (HW BP), és a már használtakat (Used). A PIC18F45K20 egyszerre 4 töréspontot tud kezelni, és jelenleg kettő elérhető ebből, mivel egyet már elhasználtunk (a 111.sorban).

Figyelem! Az aktív töréspontok száma hatással lehet a Step Into és a Step Over funkciókra. Amikor ezeket használjuk, tulajdonképpen egy töréspontot állítunk be a következő utasításra. Ha minden HW töréspontot elhasználtunk, akkor az IDE nem fog tudni újat beállítani, ehelyett minden assembly utasításon egyesével kell végiglépedni. Step Over esetén ez igen sok időt vehet igénybe a lefordított kódban. Szabadíts fel egy töréspontot ennek megoldására.

Változók és SFR regiszterek figyelése


Minden fájlregiszter értékét követhetjük a View>File Registers menüpontban, és megnézhetjük az SFR-eket a View>Special Function Registers-ben. Ezeket az ablakokat nyitva hagyni azonban nem érdemes, mivel így minden ciklusban beolvassuk a memória állapotát, ami rengeteg időbe telik. Ez az idő függ a memória méretétől és a céláramkör oszcillátorától is. Egy lassabb oszcillátorral több időt vesz igénybe ezek kiolvasása.

Ha megnyitottad valamelyik ablakot, akkor zárd be. Van egy jobb módszer a változók figyelésére, a Watch ablak. Ebben csak az általunk fontosnak vélt változókat tudjuk figyelésre beállítani (View>Watch).

SFR-eket a bal oldalon tudunk hozzáadni, kiválasztásuk után az "Add SFR" gombra kattintva. Adjuk hozzá PORTB-t, ami a gomb állapota miatt fontos, és LATD-t, ami a PORTD LEDjeinek regisztere.
Általunk definiált változókat a jobb oldalon tudunk hozzáadni. A listából kiválasztás után az "Add Symbol"-ra kell kattintani. Adjuk hozzá a LED_Display, SwitchPressed, Direction változókat.



Figyelem! Az érték mezők a Watch ablakban nem feltétlenül érvényesek rögtön hozzáadás után. Ahhoz, hogy a valós értékeket kapjuk, futtassuk végig a kódot egyszer.

Az ablak minden változónak megjeleníti a memóriacímét, a változónevét és a jelenlegi értékét. Az érték formátumát megváltoztathatjuk, ha arra jobb gombbal kattintunk, és a "Properties" pontot választjuk. Az általunk definiált típusú változóknak a típusban meghatározott értékét látjuk, nem a tényleges változóértéket.

A Watch ablakban megváltoztathatjuk egy változó értékét is. Válasszuk ki a LATD-t, kattintsunk az értékre, és adjunk neki 0xAA értéket. Beírás után nyomjunk entert! Ezzel a kijelzőnkön minden második LED-et bekapcsoltuk (0xAA binárisan: 0b10101010).

Válasszuk ki a PORTB-t, katt a jobb gombbal, majd "Properties". A formátum lenyíló menüjében válasszuk a "Binary"-t. Így kettes számrendszerben láthatjuk majd a PORTB értékét (MSB: bit7). Kattintsunk az OK-ra.

Lépkedjünk végig a kódon F8-cal. Figyeljük a PORTB 0. bitjének értékét (ez kapcsolódik a nyomógombra). Az értéknek mindig egynek kell lennie (a felhúzóellenállás miatt). Tartsuk nyomva a gombot, és léptessünk egyet F8-cal. A PORTB 0.bitje 0 lesz, a gombnyomás miatt!

Játsszunk el ezzel egy kicsit, léptessük végig a kódot, adjunk hozzá töréspontokat, adjunk a Watch ablakhoz új változókat (pl. a TMR0H és TMR0L növekedését figyelhetjük minden egyes lépéskor - ez persze nem így van, mert egy C utasítás több assembly utasításból állhat).

Megtanultuk a debugolás alapjait! Ideje egy kicsit analógra váltani (persze nem nagyon!)!

Folytatása következik!


Forrás:
Microchip PICkit™ 3 Debug Express: PIC18F45K20 – MPLAB® C Lessons

Következő: »»   5 / 5
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem