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
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.
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.
Hey, ich hab eigentlich die gleiche Frage wie Bernd. Wie kann ich einen
Interrupt bei µVision3 für den µC AN2131SC simulieren? Mein Problem wird
übrigens hier genauer erläutert...
Beitrag "Interrupt stört Programmablauf und umgekehrt?"
Viele Grüße,
elko
> 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.
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
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.
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?
ok, mal klartext:
- welcher LPC?
- welche ressource?
lösch ma aus deinem projekt alle object-files und schicks (komplett! hab
kein bock das erst wieder hinzufummeln :-) ) als zip an:
thorsten.de.buhr at_ arm _dot com
Ich schau mal kurz drüber.
VG,
/th.