Debuggen für Dummies

Gast #1350941
Lesenswert?

Hallo,

habe in der Programmierung (insbesondere bei uCs) wenig Erfahrung und 
bin heute das erste mal bei Debugging. (uC: ARM von Philips  Tool: Keil 
uVision)

Bei einem bestehenden Projekt läuft ein Timer-Interrupt alle 1ms ab.
Gleichzeit sollte einmal in der Sekunde von ein UART Interrupt 
stattfinden (nicht zeitgesteuert sondern ankommendes byte von externem 
Gerät).

Mir fehlt wohl noch ganz übel das Verständnis, aber wie lässt sich sowas 
anständig debuggen? Wenn ich versuche durch den Code zu steppen...ist es 
doch unwahrscheinlich, dass ich einmal den UART-Interrupt Handler 
reinfalle.
Der müsste doch andauernd damit beschäftigt sein die Interrupts 
abzuarbeiten?

Gruß,
Bernd
Persönliche Seite #1350957
Lesenswert?

Hi,

nein, da hast du recht, mit Interrupts debuggen ist das nicht so leicht 
:-)
Wenn du single steps machst (gleich, ob ASM oder HL (C)), sind die 
Interrupts ausgeschaltet.

Wenn du interrupts debuggen möchtest, kannst du einen Breakpoint an die 
Stelle im Interrupthandler setzen, wo du anhalten möchtest. Beim LPC21xx 
ist ev. die UART_Interrupt_Function - entry interessant, weil du da ja 
noch nach der UART source fragen musst (z.B. RT_INT).

In der Interrupt Routine kannst du dann nach belieben herumsteppen, und, 
falls du dir im gleichen Kontext etwas nochmal ansehen möchtest, den 
Programm counter (rechte maustaste) neu setzen (dies sollte man nur 
innerhalb einer funktion tun!).


VG,
/th.
Persönliche Seite #1350967
Lesenswert?

Bedenke:
Der ARM7 (z.B. LPC21xx, SAM7, STR7) unterstützt max. 2 HW-Breakpoints, 
wovon einer idR. fürs Steppen (in C) gebraucht wird. Brauchst du mehr, 
musst du dein Programm ins RAM linken & dort debuggen.

Spielst du mit einem Cortex-M3 herum (z.B. LPC17xx, STM32, SAM3), kannst 
du max. 6 HW-BPs setzen, dazu noch Watchpoints (z.B. wenn auf eine Var 
geschrieben/gelesen/beides wird, oder wenn die Variable dazu noch einen 
bestimmten Wert annimmt).

Btw: µV3 oder µV4?


Welchen LPC verwendest du? Hab da ev. noch was schönes für den UART für 
LPC2140 (sollte auch auf 2130 laufen).


VG,
/th.
Persönliche Seite #1351005
Lesenswert?

> Wie kann ich einen Interrupt bei µVision3 für den µC AN2131SC simulieren?

Hi,

ich kenn den Controller jetzt gerad nich, aber der Simulator in uVision 
unterstützt für alle Controller aus der Device Database fast alle 
OnChip-Peripherals. D.h. wenn diese Interrupts verwenden werden diese 
auch simuliert (z.B. UART-RX interrupt).

D.h. du kannst das genauso simulieren wie auf der HW laufen lassen.


VG,
/th.
Gast #1351021
Lesenswert?

Okay, und wie kann ich dann einen Interrupt (genauer: einen Timer) beim 
Debuggen auslösen oder überwachen? Weil ich z.Zt vermute, dass die ISR 
des Timers das Hauptprogramm aus dem Konzept bringt.

Viele Grüße,
elko
Persönliche Seite #1351078
Lesenswert?

genaugenommen bringt jeder interrupt dein "Hauptprogramm" aus dem 
konzept, sonst wärs kein interrupt :-)

Setze einfach einen BP zu Beginn deiner ISR, und starte das Programm 
(run).
Wenn ein Interrupt kommt (z.B. Timer), dann wird die ISR angesprungen 
und das Prog hält an deinem BP.

Bedenke, dass die Simulation ev. etwas langsamer läuft als die real HW. 
Wie schnell, das kannst du am Timer (den man per re. Maustaste auch 
resetten kann, zum messen) im untersten bereich (unten rechts) des 
µVision fensters erkennen.


VG,
/th.
Gast #1351086
Lesenswert?

Hey, das ist nett :D (ich meine, auf die Idee ganz da unten zu schauen 
wäre ich nicht gekommen...)
aber leider kommt mein Programm nie in der isr an... Wenn ich es auf dem 
Chip laufen lasse, kommt es in die isr. Was kann da falsch sein?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren