Forum: Mikrocontroller und Digitale Elektronik Debuggen von LPC2368 mit Eclipse und OpenOCD?


von mmvisual (Gast)


Lesenswert?

Hallo,

Ich mache schon seit Tagen an der Programmierumgebung herum. Ich habe 
den OpenOCD nun richtig zum laufen gebracht und mir 
Konfigurationsdateien erstellt.

Das Blink-LED Programm konnte ich auch kompillieren und mit FlashMagic 
über serielle Schnittstelle brennen. Die LEDs blinken auch.

Nun möchte ich gerne das Projekt mit Eclipse debuggen. Ich habe von 
http://www.yagarto.de die aktuelle IDE mit Zylin Plugin installiert. 
Eine Verbindung zum OpenOCD wird aufgebaut, aber debuggen geht dennoch 
nicht.

Als Debugger habe ich den "arm-elf-gdb.exe" eingestellt.
Die Debug-Konfiguration starte ich als "Zylin Embedded debug (Native)".

Unter "'Initialize' Commands" habe ich folgende Einträge:
1
target remote localhost:3333
2
monitor wait_halt
3
monitor sleep 500
4
monitor poll
5
monitor soft_reset_halt
6
monitor arm7_9 sw_bkpts disable
7
monitor arm7_9 force_hw_bkpts enable
8
monitor mww 0xE01FC040 0x0001
9
monitor mdw 0xE01FC040
10
monitor armv4_5 core_state thumb
11
symbol-file test.elf
12
break main
13
continue

Ich glaube da muss irgendwas falsch sein.
Irgendwie klappt das Debuggen nicht. Könnt Ihr mir bitte helfen?
Die Zeile "armv4_5 core_state thumb" müsste richtig sein, da ich mit der 
Compilleroption "-mthumb-interwork" kompilieren.

Beim Setzen oder Löschen eines Breakpoints erscheint in der Console des 
OpenOCD folgende Meldung:
1
Warning: arm7_9_common.c:1922 arm7_9_read_memory(): memory read caused data abort (address: 0x2c000000, size: 0x4, count: 0x1)
Irgendwie ist das auch nicht korrekt.

Die Ausgabe auf im Console-Fenster:
1
No source file named test.elf.
2
target remote localhost:3333
3
0x2c000000 in ?? ()
4
monitor wait_halt
5
waiting for target halted...
6
target halted
7
monitor sleep 500
8
monitor poll
9
target state: halted
10
target halted in ARM state due to debug request, current mode: Undefined
11
cpsr: 0x800000db pc: 0x0000002c
12
monitor soft_reset_halt
13
requesting target halt and executing a soft reset
14
monitor arm7_9 sw_bkpts disable
15
software breakpoints disabled
16
monitor arm7_9 force_hw_bkpts enable
17
force hardware breakpoints enabled
18
monitor mww 0xE01FC040 0x0001
19
monitor mdw 0xE01FC040
20
0xe01fc040: 00000001 
21
monitor armv4_5 core_state thumb
22
core state: Thumb
23
symbol-file test.elf
24
break main
25
Breakpoint 2 at 0x108: file src/main.c, line 100.
26
continue

Hier die OpenOCD Konfigurationsdatei:
1
telnet_port 4444
2
gdb_port 3333
3
interface ft2232
4
ft2232_device_desc "Olimex OpenOCD JTAG A"
5
ft2232_layout "olimex-jtag"
6
ft2232_vid_pid 0x15BA 0x0003
7
jtag_speed 12
8
jtag_nsrst_delay 200
9
jtag_ntrst_delay 200
10
reset_config trst_and_srst
11
jtag_device 4 0x1 0xf 0xe
12
target arm7tdmi big reset_halt 0 arm7tdmi-s_r4
13
run_and_halt_time 0 30
14
daemon_startup reset
15
working_area 0 0x40000000 0x4000 nobackup
16
flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v2 12000 calc_checksum

... Ich habe mich schon halb tot gegoogelt um die richtigen 
Einstellungen zu finden, leider ohne Erfolg. Bitte helft mir.

Vielen Dank für eure Hilfe im Voraus, Grüße Markus

von Tilo (Gast)


Lesenswert?

Schau mal in deinen Dateien, ob die Adressen für SRam und Flash stimmen.
Aus irgend einem Grund soll auf Speicheradressen zugegriffen werden,
die es anscheinend nicht gibt.

von MmVisual (Gast)


Lesenswert?

Im Linker-Script stehen diese Adresse nicht drin:
1
MEMORY 
2
{
3
  flash  : ORIGIN = 0x00000000, LENGTH = 500K
4
  ram  : ORIGIN = 0x40000000, LENGTH = 32K
5
  usbram   : ORIGIN = 0x7FD00000, LENGTH = 8K
6
  ethram   : ORIGIN = 0x7FE00000, LENGTH = 16K
7
}
8
__stack_end__ = 0x40000000 + 32K - 4;

Im Quellcode habe ich auch keine Adresse 0x2c000000 definiert, also es 
ist ein einfaches Blink-Led Programm mit einer Delay als For-Schleife 
ohne Interrupt. Der Stack funktioniert auch, da die Delay eine separate 
Funktion ist.
Gruß Markus.

von Jansus (Gast)


Lesenswert?

Müsste es nicht heißen: monitor mww 0xE01FC040 0x0002 (RAM Mode)?

Grüße
Jansus

von mmvisual (Gast)


Lesenswert?

Eigentlich nicht, denn ich möchte im Flash debuggen. Dazu flashe ich 
erstmal mit FlashMagic, dann möchte ich debuggen.
In den "'Initialize' Commands" gibt es daher auch nicht den Befehl 
"load".
Der LPC2368 hat nicht so viel RAM dass ich mein Projekt im RAM debuggen 
kann, mein Projekt wird sicher größer werden als das jetzige Blink-LED.

Diese Info habe ich von diesem Thread 
Beitrag "LPC2106 mit Openocd im Flash debuggen" aber bei meinem LPC2368 
klappt das irgendwie nicht.

Nur eines habe ich nicht gefunden:
1
"Damit es funktioniert muß aber in der Konfiguration des Debuggers auf
2
der Registerkarte Debugger die Option "Start on startup at" aktiviert
3
sein."

von gast (Gast)


Lesenswert?

Man kann doch driekt via load ins Flash laden mit OpenOCD, oder täusche 
ich mich da? Siehe Beispiel für LPC2148 auf Yagarto Seite.

von gast (Gast)


Lesenswert?

Achso die Frage war wiso dann zuerst mit Flash magic flashen.

von MmVisual (Gast)


Lesenswert?

Ich habe das auch schon mit dem OpenODC und Telnet versucht. So konnte 
ich direkt, ohne Eclipse und ARM-ELF-GDB, den Flash manipulieren.

Aber:
Das klappt nicht richtig, nur jedes Xte mal klappt es. Un wenn das 
Programm dann im Flash ist kann ich die CPU über Telnet Befehle nicht 
starten ("reset run" geht nicht)
Der Telnet-Befehl "flash ersae 0 0 0" sollte doch den Flash löschen. 
Dann der Befehl "mdb 0 16" zeigt mir auch lauter FF an. Wenn ich die CPU 
Stromlos mache und wieder aktiviere, dann sollten da immer noch FF drin 
stehen, aber da erscheint wieder der alte Code (nur die CPU läuft 
nicht).
Also das mit dem Flashen, Flash löschen usw. geht mit OpenOCD nicht 
richtig. (Version R279 verwende ich)
Der Befehl "flash erase_check 0" lässt sogar das OpenOCD abstürzen.

Wenn das ganze über Telnet nicht richtig geht, wie soll es dann über 
Eclipse und ARM-ELF-GDB über die "monitor" Befehle gehen. Daher versuche 
ich die Möglichkeit von Sven Woehlbier.

von gast (Gast)


Lesenswert?

Komisch also bei mir mit LPC2148 geht es mit der Version. Flash Debuggen 
und mit load zuerst ins Flash laden. Hoffe das es auch im Flash ist 
wobei, wenn ich den uC Resete läuft die Applikation auch also muss es im 
Flash sein oder.

Kommisch ich habe auch noch eine LPC23xx ich versuchs am abend auch mal 
mit diesem

von MmVisual (Gast)


Lesenswert?

Kannst Du mir die Konfiguration des OpenOCD und "Commands" für den 
Debugger posten?
Den Umweg über Flash Magic würde ich mir gerne ersparen.
Eigentlich müsste sich der LPC23xx gleich verhalten, kommen ja beide von 
NXP ;)

von gast (Gast)


Lesenswert?

Jo mach ich, am Abend.

von gast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo hier der workspace in eine Orner entpacken und Eclipse auf dem 
Workspace starten dann kanns du die die Projekt einstellungen ansehen.

viel spaß

von mmvisual (Gast)


Lesenswert?

Vielen Dank!!!!

Ich hab schon einen Unterschied gesehen:
1
# tell gdb our flash memory map
2
# and enable flash programming
3
gdb_memory_map enable
4
gdb_flash_program enable
das stand nicht in meiner GDB Datei für den OpenOCD drin. Ich habe auch 
die Endian Einstellung unter "target" wieder auf "little" umgestellt.
Auf anhieb möchte das Demo-Projekt nicht funktionieren, ich 
experimentiere noch etwas.

Im Moment kämpfe ich noch mit der Debugger Meldung "No source file named 
test.elf.". Diese kommt als erste Zeile sobald ich den Debugger 
aktivieren. Gestern kam diese noch nicht :(

von mmvisual (Gast)


Lesenswert?

Ganz so einfach ist das alles nicht....
Der Debugger schreibt mir folgendes auf den Bildschirm (PP-Wiggler), der 
OLIMEX ist ein bischen schneller:
1
No source file named test.elf.
2
target remote localhost:3333
3
main () at src/main.c:120
4
120        FIO3SET = 0x06000000;
5
monitor reset
6
monitor sleep 500
7
monitor poll
8
target state: running
9
monitor soft_reset_halt
10
requesting target halt and executing a soft reset
11
monitor arm7_9 sw_bkpts disable
12
software breakpoints disabled
13
monitor arm7_9 force_hw_bkpts enable
14
force hardware breakpoints enabled
15
monitor mww 0xE01FC040 0x0002
16
monitor mdw 0xE01FC040
17
0xe01fc040: 00000002 
18
monitor flash erase 0 0 0
19
erased sectors 0 through 0 on flash bank 0 in 0s 180259us
20
monitor flash write_image test.elf
21
wrote 2000 byte from file test.elf in 0s 540778us (3.611695 kb/s)
22
break main
23
Breakpoint 1 at 0x160: file src/main.c, line 100.
24
load
25
Loading section startup, size 0x3c lma 0x0
26
Loading section prog, size 0x794 lma 0x3c
27
Memory access error while loading section prog.
28
continue
Die erste Zeile kommt mir komisch vor, die Datei existiert.
Der Befehl "load" schreib nicht ins Flash. Ich bekomme nur mit den 
Befehlen "monitor flash erase" und "monitor flash write_image" etwas in 
das Flash, und dann kann ich das auch debuggen.

von Gast (Gast)


Lesenswert?

Hi!

Mich würden die GDB-Einstellungen auch brennend interessieren. Leider 
kann ich im geposteten Projekt keine Einstellungen entdecken. Wenn ich's 
mit Eclipse öffne, finde ich leider auch nix.
Kann einer von Euch Beiden die Commands noch mal als einzelne Datei oder 
so hier ins Forum stellen?

Wäre klasse!

von mmvisual (Gast)


Lesenswert?

Hier die ganze Info:

- Für LPC23xx
- Eclipse Version 3.3.1.1
- Arm-Elf-GCC Version 4.2.1
- Arm-Elf-GDB Version 6.5.50.20060612-cvs
- OpenOCD R279

Setup-Pakete von www.yagarto.de:
- yagarto-bu-2.17_gcc-4.2.1-c-c++_nl-1.15.0_gi-6.5.5_20071117.exe
- yagarto-ide-20071227-setup.exe
- openocd-r279-20080202.exe

Zusätzlich kann von www.flashmagictool.com auch das Flash-Tool 
"FlashMagic.exe" verwendet werden. Das funktioniert über den COM-Port 
sicher und zuverlässig. (Die Reset und Boot-Pins sollten auch über den 
COM-Port gesteuert werden.)

Die Konfig-Datei für den OpenOPC OLIMEX ARM-USB-OCD:
1
#daemon configuration
2
telnet_port 4444
3
gdb_port 3333
4
# tell gdb our flash memory map
5
# and enable flash programming
6
gdb_memory_map enable
7
gdb_flash_program enable
8
#interface
9
interface ft2232
10
ft2232_device_desc "Olimex OpenOCD JTAG A"
11
ft2232_layout "olimex-jtag"
12
ft2232_vid_pid 0x15BA 0x0003
13
jtag_speed 1
14
jtag_nsrst_delay 200
15
jtag_ntrst_delay 200
16
#use combined on interfaces or targets that can't set TRST/SRST separately
17
reset_config trst_and_srst
18
#jtag scan chain
19
jtag_device 4 0x1 0xf 0xe
20
#target configuration
21
target arm7tdmi little reset_halt 0 arm7tdmi-s_r4
22
run_and_halt_time 0 30
23
daemon_startup reset
24
working_area 0 0x40000000 0x4000 nobackup
25
#flash configuration
26
flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v2 12000 calc_checksum

Die Konfig-Datei für den OpenOPC Parallel-Port Wiggler:
1
#daemon configuration
2
telnet_port 4444
3
gdb_port 3333
4
# tell gdb our flash memory map
5
# and enable flash programming
6
gdb_memory_map enable
7
gdb_flash_program enable
8
#interface
9
interface parport
10
parport_port 0x378
11
parport_cable wiggler
12
jtag_speed 0
13
jtag_nsrst_delay 200
14
jtag_ntrst_delay 200
15
#use combined on interfaces or targets that can't set TRST/SRST separately
16
reset_config trst_and_srst
17
#jtag scan chain
18
jtag_device 4 0x1 0xf 0xe
19
#target configuration
20
target arm7tdmi little reset_halt 0 arm7tdmi-s_r4
21
run_and_halt_time 0 30
22
daemon_startup reset
23
working_area 0 0x40000000 0x4000 nobackup
24
#flash configuration
25
flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v2 12000 calc_checksum
Dateien sind für den LPC2366, der LPC2368 hat mehr Flash...

Im "Open External Tools Dialog..." wird der OpenOCD Debugger angelegt, 
mit folgenden Einträgen:
1
Location: C:\WinARM\openocd\bin\openocd-pp.exe
2
Working Directory: ${workspace_loc:/LPC2368_MM}
3
Arguments: -f ${workspace_loc:/LPC2368_MM}\prj\lpc23xx_pp.cfg

Die Debugger-Einstellung unter "'initialize' commands":
1
target remote localhost:3333
2
monitor reset
3
monitor sleep 500
4
monitor poll
5
monitor soft_reset_halt
6
monitor arm7_9 sw_bkpts disable
7
monitor arm7_9 force_hw_bkpts enable
8
monitor mww 0xE01FC040 0x0002
9
monitor mdw 0xE01FC040
10
monitor flash erase 0 0 0
11
monitor flash write_image test.elf
12
break main
13
load
14
continue
Der "monitor flash erase" Befehl muss natürlich den zu löschenden 
Datenmengen angepasst werden. Wichtig: Das ganze muss unter "Zylin 
Embedded debug (Native)" ausgeführt werden.

Der Olimex macht beim Start der Debug-Session keinen Break bei Main, 
warum auch immer... !?? beim PP Wiggler geht's.

Dass alle Dateinamen und Pfadangaben den gegebenheiten angepasst werden 
müssen, bräuchte ich eigentlich nicht erwähnen.

Ich danke für eure Unterstützung, Gruß Markus.

von mmvisual (Gast)


Angehängte Dateien:

Lesenswert?

Anbei alle Konfigurationen als Download.
Ich habe von den einzelnen Eclipse-Seiten, zumindest den wichtigen, 
Screenshots mit beigefügt.

@Admin @M. Fischer @Dominic Rath
Ihr könnt, eure yagarto / berlios Seite gerne mit diesen Infos erweitern 
:)

von gast (Gast)


Lesenswert?

Bekommt ihr eigentlich auch immer warnings und so weiter?
Funktionieren tut es trotzdem und auch wirklich in einer vertretbaren 
zeit aber kommisch sind diese trotzdem irgendwas mit memory_read etc….

von Dominic R. (dominic)


Lesenswert?

Beim Zurückverfolgen der Stack Frames versucht GDB oft auf nicht 
definierte Bereiche zuzugreifen, was dann zu Data-Aborts führt. Der 
OpenOCD gibt dafür Warnings aus, die aber ignoriert werden können.

@mmvisual:

Ich werd Michael ne Mail schreiben, falls er deinen Post nicht schon 
selbst gesehen hat.

Gruß,

Dominic

von MmVisual (Gast)


Lesenswert?

Vielen Dank! Ich wollte euch nicht per Mail belästigen, Ihr bekommt 
sicher eh schon viel Spams...

In den Debugger-Einstellungen habe ich nach den "monitor" Befehlen noch 
diese Zeile eingefügt, die ist zwar nicht wichtig, könnte aber helfen 
nicht zu viele BKPTS zu haben...
1
set remote hardware-watchpoint-limit 2

Gruß Markus

von gast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich habe ein Problem bei der Installation von Yagarto.
Ich habe 2 Rechner, auf dem einen läut es auf dem anderen habe ich ein 
komisches Problem. Es fehlen die beiden Einträge siehe Bild rot markiert 
auf Rechner 2. Ohne diese kann man ja nicht debuggen. Auf beiden 
Rechnern ist dasselbe installiert. Hardware nahezu identisch, nur der 
eine hat ein englisches WinXP –  kann das zu Probleme führen?

Was kann ich machen jemand ne Idee.

von mmvisual (Gast)


Angehängte Dateien:

Lesenswert?

Ob diese beiden Zylin Einträge sichtbar sind oder nicht kann 
parametriert werden.
Auf dieser Seite, siehe Ihr Bild, gibt es oben wo die Tasten Add, Copy 
usw. sind eine Taste "Filter lauch Configurations..." (Mit der Maus 
drüber fahren, dann kommt dieser Hinweistext).
Im Anhang habe ich eine Grafik mit der Parametrierung gelegt.
Mit "Filter checked launch configuration types:" kann dann z.B. Zylin 
ausgeblendet werden.
Wenn das nicht Hilft das Verzeichnis "Yagarto-ide" einfach löschen 
(vorher Zippen) und das Yagarto Version 
"yagarto-bu-2.17_gcc-4.2.1-c-c++_nl-1.15.0_gi-6.5.5_20071117.exe" 
nochmal installieren.
Gru0 Markus.

von Gast (Gast)


Lesenswert?

Hallo

Bzgl. Einträge Zylin:

Achtung: mit aktuelle Java-Version downloaden. Mit Version 1.4.x gibt es 
Probleme, da sieht man die Einträge nicht!!! Steht eigentlich auch im 
Yagarto-Tutorial drin.


@mmvisual: Vielen Dank für Deine Hilfe!

Wieso liefert eigentlich die Console von openocd in Eclipse :

"
No source file named main_ram.elf.
target remote localhost:3333
0x40000140 in delay (i=29211) at src/main.c:62
62    while(i--);
monitor reset
monitor sleep 500
monitor poll
target state: halted
...
..
"

wieso findet openocd das file nicht? debugen funktioniert aber.

Vielen Dank

von mmvisual (Gast)


Lesenswert?

Bei mir kommt diese Fehlermeldung auch, funktioniert aber dennoch. Ich 
gehe von einem Darstellungsproblem von Zylin aus. Vieleicht gib es von 
Zylin ein Update das dieses Problem behebt.

von mmvisual (Gast)


Lesenswert?

Nun ist mein Code entwas gewachsen und ich habe ständig das Problem, das 
ich beim Debuggen den Code nicht in den Prozessor bekommen, also zu 
20-30% geht es, dann aber nur wenn ich den Prozessor Spannungslos mache 
und den OpenOCD neu starte.

Immer wieder bringt mir der Deugger die Meldungen "No MMU present" und 
"Ignoring packet error, continuing..." und dann geht das Debuggen nicht.

Woran kann es liegen?

Irgendwie habe ich das gefühl, dass der GDB nicht lange genug auf die 
Rückmeldungen von OpenOCD wartet oder dass die sich nicht richtig 
verstehen (aber nur manchmal!). Gibt es einen Warte-Befehl der den GDB 
zwingt auf OpenOCD zu warten?

Ebenso meldet der GDB immer wieder folgendes: "warning: (Internal error: 
pc 0x40 in read in psymtab, but not in symtab.)".
Von welchen Link kann ich eine Arm-Elf-GDB.exe bekommen, die dieses 
Problem nicht mehr hat?

Selbst sogar wenn ich anschließend mit Flash Magic über serielle 
Schnittstelle flashen möchte geht es nicht, ich muss erst die CPU 
Spannungslos schalten, dann kann ich flashen. Also das OpcOCD verbiegt 
irgendwie so den Chip, dass nicht einmal ein Reset hilft, nur ein harter 
Reset über Spannung !?!?

Ich bin Dankbar über jeden Hinweis.

Anbei die Konfigurationen und Meldungen:

Version OpenOCD r320.

Die Konfiguration beim Start der Debug-Session:
1
target remote localhost:3333
2
monitor reset
3
monitor sleep 200
4
monitor poll
5
monitor soft_reset_halt
6
monitor arm7_9 sw_bkpts disable
7
monitor arm7_9 force_hw_bkpts enable
8
monitor mww 0xE01FC040 0x0002
9
monitor mdw 0xE01FC040
10
monitor flash erase 0 0 8
11
monitor flash auto_erase on
12
monitor flash erase_check 0
13
monitor flash write_image main.elf
14
set remote hardware-watchpoint-limit 2
15
load
16
continue

Folgende Medungen werden von Arm-Elf-GDB ausgegeben:
1
No source file named main.elf.
2
target remote localhost:3333
3
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
4
5
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
6
7
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
8
9
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
10
11
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
12
13
0x00000040 in Undef_Handler () at ../../gcc-4.2.1/gcc/config/arm/lib1funcs.asm:662
14
662  ../../gcc-4.2.1/gcc/config/arm/lib1funcs.asm: No such file or directory.
15
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
16
17
  in ../../gcc-4.2.1/gcc/config/arm/lib1funcs.asm
18
Current language:  auto; currently asm
19
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
20
21
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
22
23
monitor reset
24
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
25
26
monitor sleep 200
27
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
28
29
monitor poll
30
target state: running
31
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
32
33
requesting target halt and executing a soft reset
34
monitor soft_reset_halt
35
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
36
37
monitor arm7_9 sw_bkpts disable
38
software breakpoints disabled
39
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
40
41
monitor arm7_9 force_hw_bkpts enable
42
force hardware breakpoints enabled
43
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
44
45
monitor mww 0xE01FC040 0x0002
46
memory write caused data abort (address: 0xe01fc040, size: 0x4, count: 0x1)
47
error: access caused data abort, system possibly corrupted
48
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
49
50
monitor mdw 0xE01FC040
51
0xe01fc040: 00000002 
52
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
53
54
monitor flash erase 0 0 8
55
No MMU present
56
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
57
58
erased sectors 0 through 8 on flash bank 0 in 0s 200288us
59
monitor flash auto_erase on
60
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
61
62
monitor flash erase_check 0
63
successfully checked erase state
64
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
65
66
monitor flash write_image main.elf
67
wrote 18124 byte from file main.elf in 2s 323341us (7.618003 kb/s)
68
wrote 18124 byte from file main.elf in 2s 323341us (7.618003 kb/s)
69
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
70
71
set remote hardware-watchpoint-limit 2
72
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
73
74
warning: (Internal error: pc 0x0 in read in psymtab, but not in symtab.)
75
76
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)
77
78
load
79
Loading section .text, size 0x46cc lma 0x0
80
Memory access error while loading section .text.
81
continue
82
warning: (Internal error: pc 0x40 in read in psymtab, but not in symtab.)

Folgende Medungen werden von OpenOCD ausgegeben:
1
Info:    configuration.c:56 configuration_output_handler(): opened C:\WinARM\Projekt\LPC2368_MM\prj\lpc23xx_pp.cfg
2
Info:    jtag.c:1230 jtag_examine_chain(): JTAG device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
3
Warning: embeddedice.c:175 embeddedice_build_reg_cache(): EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
4
User:   gdb_server.c:532 gdb_output(): waiting for target halted...
5
User:   gdb_server.c:532 gdb_output(): target halted
6
Info:    server.c:67 add_connection(): accepted 'gdb' connection from 0
7
User:   gdb_server.c:532 gdb_output(): target state: running
8
User:   gdb_server.c:532 gdb_output(): requesting target halt and executing a soft reset
9
User:   gdb_server.c:532 gdb_output(): software breakpoints disabled
10
User:   gdb_server.c:532 gdb_output(): force hardware breakpoints enabled
11
User:   gdb_server.c:532 gdb_output(): 0xe01fc040: 00000002 
12
User:   target.c:390 default_mmu(): No MMU present
13
Error:   armv4_5.c:591 armv4_5_run_algorithm(): timeout waiting for algorithm to complete, trying to halt target
14
Warning: gdb_server.c:307 gdb_put_packet_inner(): negative reply, retrying
15
Warning: gdb_server.c:307 gdb_put_packet_inner(): negative reply, retrying
16
Warning: gdb_server.c:307 gdb_put_packet_inner(): negative reply, retrying
17
Warning: arm7_9_common.c:2117 arm7_9_write_memory(): memory write caused data abort (address: 0x40000008, size: 0x4, count: 0x6)
18
User:   gdb_server.c:532 gdb_output(): erased sectors 0 through 8 on flash bank 0 in 10s 354890us
19
Error:   gdb_server.c:330 gdb_put_packet_inner(): unknown character 0x24 in reply, dropping connection
20
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x71
21
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x52
22
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x63
23
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x6d
24
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x64
25
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x2c
26
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
27
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
28
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
29
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x63
30
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
31
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
32
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
33
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x33
34
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
35
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x38
36
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
37
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x30
38
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
39
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
40
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
41
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
42
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
43
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x34
44
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
45
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
46
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
47
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
48
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
49
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
50
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
51
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
52
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
53
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
54
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
55
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x33
56
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
57
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
58
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
59
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x30
60
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
61
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
62
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
63
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x65
64
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x23
65
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x65
66
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
67
Error:   gdb_server.c:330 gdb_put_packet_inner(): unknown character 0x24 in reply, dropping connection
68
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x71
69
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x52
70
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x63
71
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x6d
72
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x64
73
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x2c
74
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
75
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
76
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
77
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x63
78
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
79
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
80
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
81
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x33
82
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
83
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x38
84
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
85
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x30
86
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
87
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
88
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
89
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
90
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
91
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x34
92
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
93
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
94
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
95
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
96
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
97
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
98
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
99
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
100
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
101
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x31
102
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
103
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x33
104
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
105
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x35
106
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x32
107
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x30
108
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
109
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x66
110
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x36
111
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x65
112
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x23
113
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x65
114
Warning: gdb_server.c:384 gdb_get_packet_inner(): ignoring character 0x37
115
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
116
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
117
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
118
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
119
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
120
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
121
User:   gdb_server.c:532 gdb_output(): successfully checked erase state
122
User:   gdb_server.c:532 gdb_output(): wrote 18124 byte from file main.elf in 2s 113039us (8.376191 kb/s)
123
Warning: gdb_server.c:307 gdb_put_packet_inner(): negative reply, retrying
124
Warning: gdb_server.c:374 gdb_get_packet_inner(): acknowledgment received, but no packet pending
125
Warning: arm7_9_common.c:2117 arm7_9_write_memory(): memory write caused data abort (address: 0x00000000, size: 0x4, count: 0x61)
Die ganzen "ignoring character" Meldungen ergeben folgenden Sinn:
1
$qRcmd,666c617368206175746f5f6572617365206f6e#e7
2
$qRcmd,666c617368206175746f5f6572617365206f6e#e7
Doch was bedeuten diese, was will der Debugger von OpenOCD?

von Dominic R. (dominic)


Lesenswert?

Die Probleme gehen schon viel früher los:

Error:   armv4_5.c:591 armv4_5_run_algorithm(): timeout waiting for 
algorithm to complete, trying to halt target

Deine erste Aktion ist "monitor mdw 0xE01FC040" - scheinbar dauert das 
unverhältnismässig lang, wahrscheinlich stösst der OpenOCD dabei aber 
auf ein anderes Problem.

Versuch doch erstmal, ob die Befehle, wenn du sie "per Hand" in einer 
Telnet Session eingibst, funktionieren.

Bei qRcmd werden einfach die ASCII Zeichen Hex codiert:
66 = f, 6c = l, 61 = a ... (flash)

Insgesamt wohl "monitor flash auto_erase on" (monitor sagt GDB, den 
folgenden String per qRcmd an das remote Target zu schicken).

Gruß,

Dominic

von mmvisual (Gast)


Lesenswert?

Auf die Idee muss man erst mal kommen, dass $qRcmd einen String als HEX 
Code übergibt...

Ich habe die einzelnen Befehle von Hand über Telnet eingegeben:
1
Open On-Chip Debugger
2
> reset
3
> sleep 500
4
> poll
5
target state: running
6
> soft_reset_halt
7
requesting target halt and executing a soft reset
8
Target 0 halted
9
target halted in ARM state due to debug request, current mode: Supervisor
10
cpsr: 0x000000d3 pc: 0x00000000
11
> arm7_9 sw_bkpts disable
12
software breakpoints disabled
13
> arm7_9 force_hw_bkpts enable
14
force hardware breakpoints enabled
15
> mww 0xE01FC040 0x0002
16
memory write caused data abort (address: 0xe01fc040, size: 0x4, count: 0x1)
17
error: access caused data abort, system possibly corrupted
18
> mdw 0xE01FC040
19
0xe01fc040: 00000002
20
> flash erase 0 0 8
21
No MMU present
22
erased sectors 0 through 8 on flash bank 0 in 0s 190273us
23
> flash auto_erase on
24
> flash erase_check 0
25
successfully checked erase state
26
> flash write_image c:\main.elf
27
wrote 18124 byte from file c:\main.elf in 2s 153096us (8.220357 kb/s)
28
>

in der Tat meldert er beim "mww" Befehle "system possibly corrupted"

Hier die Meldungen die OpenOCD in die Console schreibet:
1
Info:    server.c:67 add_connection(): accepted 'telnet' connection from 0
2
Warning: arm7_9_common.c:2117 arm7_9_write_memory(): memory write caused data abort (address: 0xe01fc040, size: 0x4, count: 0x1)
3
User:   target.c:390 default_mmu(): No MMU present

von mmvisual (Gast)


Lesenswert?

@Dominic: Gerne kann ich für Sie OpenOCD Versionen testen, bevor Sie die 
auf yagarto veröffentlichen...

von Dominic R. (dominic)


Lesenswert?

Danke für das Angebot, die Windows Binaries auf Yagarto.de stellt 
Michael Fischer zusammen (wie auch die ganze Yagarto Seite, der OpenOCD 
ist dort nur "Gast"). Beim OpenOCD Release-Modell wird sich in nächster 
Zeit onehin etwas ändern, da sich der SVN Trunk derzeit viel zu schnell 
ändert. Wenn es dann regelmässige Releases gibt, werden wir im Vorfeld 
wohl auch Betas zur Verfügung stellen.

Das Memory-Abort Problem beim Zugriff auf das MEMMAP (ich denke darum 
geht es?) kommt mir bekannt vor. Es wird ein Abort gemeldet, obwohl 
tatsächlich keiner stattfand.

Im Anschluss scheinen alle Kommandos ordnungsgemäß durchgelaufen zu sein 
- hat das geflashte Programm danach denn funktioniert?

Gruß,

Dominic

von mmvisual (Gast)


Lesenswert?

Ja, um diesen Fehler geht es.
Nach dem Flashen funktioniert das Programm nicht, auch nicht wenn die 
CPU Spannungslos schalte.
Die gleiche HEX-Datei mit Flash Magic funktioniert, also der Code in OK.
Gruß Markus.

von mmvisual (Gast)


Angehängte Dateien:

Lesenswert?

Heute Abend habe ich mich noch mal damit intensiv auseinander gesetzt, 
im Anhang sind die Scripte für OpenOCD, ARM-ELF-GDB Verbindungsaufbau 
und die jeweiligen Antworten.
Von 20 mal probieren, gelang es mir nicht zu debuggen. Nur zwei mal hat 
es geklappt dass das programm drin war und nach Spannung aus/ein lief 
der Prozessor.
Der "load" Befehl von ARM-ELF-GDB lädt auch nur ein Teil des programms 
in den flash, da ist der OpenOCD Befehl "flash write_image" schon 
besser, geht aber auch nur zu 10%. Der gesamte Code ist ca. 17KB groß 
(Bin-Dateigröße) was eigentlich auch nicht so übermäßig viel ist.

Die Versionen: OpenOCD r320
               Arm-Elf-GDB V6.7.1

Gibt es vieleicht noch eine andere Möglichkeit, was ich testen kann?
Im Grunde ist Yagarto schon ein echt tolles und leistungsfähiges System.

Gibt es jemand, der Eclipse mit dem LPC23xx am laufen hat?

Vielen Dank für eure Unterstützung im Voraus.

von Tilo (Gast)


Lesenswert?

Wie lange dauert bei dir das flashen?
Ich musst bei größeren Programmen vor dem flashen
größerer Programme die Wartezeit mit
"set remotetimeout 60"
verlängern.

von mmvisual (Gast)


Lesenswert?

Das Flashen geht fix:
1
wrote 16484 byte from file main.elf in 1s 692433us (9.511547 kb/s)

@Hr. Lutz: Vielen Dank für den Hinweis, ich habe den Befehl mit 
aufgenommen. Leider wars das noch nicht.

Folgende Meldung schreibt mir der Arm-Elf-GDB:
1
monitor mww 0xE01FC040 0x0002
2
memory write caused data abort (address: 0xe01fc040, size: 0x4, count: 0x1)
3
error: access caused data abort, system possibly corrupted

@Hr. Lutz: welche Versionen sezten Sie ein?

von mmvisual (Gast)


Lesenswert?

Mit Spannung Aus/Ein konnte ich mit Flash-Magic auch flashen. Nun habe 
die die serielle Bootloader-Anbindung so modifiziert, dass Flash-Magic 
nicht nur den Reset Pin sondern auch den TRST Pin mit rücksetzt. Jetzt 
muss ich keine Spannung mehr weg nehmen, damit ich mit Flash-Magic 
jederzeit flashen kann, egal was das JTAG Interface vorher anstellt.
Debuggen geht immer noch nicht.

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.