Forum: Mikrocontroller und Digitale Elektronik LPC2106 mit Openocd im Flash debuggen


von Sven W. (woehlb)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

das Debuggen des LPC2106 mit Openocd vom 01.08.2006 und Eclipse im RAM 
funktioniert (auf www.olimex.com gibt es beim LPC2106 Evaluationboard 
einen Link auf eine Schritt für Schritt Anleitung zur Arbeit mit 
Eclipse; leider ausgelegt für OCDDemon von Macraigor).

Probleme habe ich mit dem Debuggen im Flash. Das Programm ist für den 
Flash übersetzt. Im ersten Schritt lade ich ersteinmal das File main.bin 
außerhalb von Eclipse per Hand in den Flash (läßt sich unter Umständen 
später integrieren!?). Dem GDB werden folgende Befehle zur 
Initialisierung übergeben:

target remote localhost:3333
monitor reset
monitor sleep 500
monitor poll
monitor soft_reset_halt
monitor arm7_9 sw_bkpts disable
monitor arm7_9 force_hw_bkpts enable
monitor mww 0xE01FC040 0x0001
monitor mdw 0xE01FC040
symbol-file main.out
set $pc=0x0
thbreak main
continue

Das Programm wird aber anscheinend auf der falschen Adresse gestoppt, 
also nicht am Begin von main(). Der Breakpoint den Eclipse anzeigt, 
scheint auf der letzten Adresse zu liegen, bei dem ich das Debuggen 
abgebrochen habe, daß anscheinend mehr zufällig und hackelig einmal 
funktioniert hat (wenn denn die Anzeige wirklich aktualisiert wurde). Im 
Moment funktioniert das Debuggen jedenfalls nicht. Die openocd-logs habe 
ich an diese Anfrage angehängt.

Wo könnten die Probleme liegen?

Tschau und Danke!
Sven

von Dominic R. (dominic)


Lesenswert?

Hallo Sven,

wenn dein OpenOCD tatsächlich vom 01.08.2006 ist, ist er hoffnungslos 
veraltet. Auf www.yagarto.de gibt es aktuell Revision 115, die speziell 
auch ein Problem im Breakpointhandling behebt. Gegenüber einer Version 
von August diesen Jahres sind noch jede Menge weiterer Verbesserungen 
enthalten. Der Versions-String, der vom OpenOCD beim starten ausgegeben 
wird, ist leider nicht so aussagekräftig, da ich immer wieder versäume, 
ihn upzudaten.

Gruss,

Dominic

von Sven Woehlbier (Gast)


Lesenswert?

Hallo Dominic,

vielen Dank für Deine schnelle Antwort! Ich habe mittlerweile das 
Openocd Revision 115 installiert. Leider hat das an meinem Problem 
nichts geändert.

Ich teste das Debuggen mit einem Programm, das die LED auf dem Olimex 
LPC2106 Evaluationboard zum Blinken bringt. Wenn ich die Application 
starte blinkt diese LED. Das Progamm läuft also aus dem Flash heraus.

Allerdings wird mir unter Eclipse immer noch eine Haltepunkt angezeigt 
der nicht am Anfang der main() Funktion liegt. Außerdem werden mir die 
Buttons zum schrittweisen Debuggen nicht angeboten.

Ich werde morgen das Ganze mal auf der Kommandozeilenebene mit dem GDB 
direkt ausprobieren.

Tschau Sven!

von Sven Woehlbier (Gast)


Lesenswert?

Hallo,

ich habe doch schon mal ausprobiert ob es mit dem GDB direkt 
funktioniert. Wie fast erwartet klappte das Debuggen auf Kommandozeile 
problemlos. Es ist also ein Eclipse-Problem. Fällt jemaden ein, was das 
Problem sein könnte?

Tschau Sven!

von Sven W. (woehlb)


Lesenswert?

Hallo,

es war wirklich ein Eclipse Problem, jedenfalls in Zusammenhang mit den 
Kommandos die ich zur Initialisierung des GDB's und des Openocd's 
übergeben haben. Mit der folgenden Kommandosequenz funktioniert nicht 
nur das Debuggen im Flash sondern auch die vorherige automatische 
Programmierung des Flash:

target remote localhost:3333
monitor wait_halt
monitor sleep 500
monitor poll
monitor flash write 0 main.bin 0
monitor soft_reset_halt
monitor arm7_9 sw_bkpts disable
monitor arm7_9 force_hw_bkpts enable
monitor mww 0xE01FC040 0x0001
monitor mdw 0xE01FC040
symbol-file main.out
set $pc=0x0

Damit es funktioniert muß aber in der Konfiguration des Debuggers auf 
der Registerkarte Debugger die Option "Start on startup at" aktiviert 
sein. Dann scheint Eclipse selber einen temporären Breakpoint auf main() 
zusetzen. Das Programm läuft auf dessen Position, wenn man unter Eclipse 
den Button "Resume" drückt. Natürlich muß das Prgramm auch für den Flash 
gelinkt sein. Außerdem erwartet Openocd ein Binaryfile (main.bin) zur 
Programmierung des Flash.

Tschau Leute!

von Sven Woehlbier (Gast)


Lesenswert?

Ok, mein letzter Beitrag war nicht ganz korrekt. Dem GDB muß Eclipse nur 
die folgenden Befehle übergeben:

target remote localhost:3333
monitor wait_halt
monitor sleep 500
monitor poll
monitor soft_reset_halt
monitor arm7_9 sw_bkpts disable
monitor arm7_9 force_hw_bkpts enable
monitor mww 0xE01FC040 0x0001
monitor mdw 0xE01FC040
symbol-file main.out
set $pc=0x0

Das automatische Programmieren klappt so also nicht. Der Flash muß vor 
dem Debuggen programmiert werden. Dann funktioniert das Debuggen aus dem 
Flash richtig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.