Hallo,
ich versuche OpenOCD Eclipse sourcery zum Laufen zu bringen. Das
Programm scheint irgendwie im Reset_Handler hängen zu bleiben. Hier ein
Ausschnitt aus dem Diassembly:
1 | 197 for (p= (char *) &_ebss; p< (char *) &_estack; p++) {
|
2 | 08002f6a: movw r3, #900 ; 0x384
|
3 | 08002f6e: movt r3, #8192 ; 0x2000
|
4 | 08002f72: str r3, [r7, #4]
|
5 | 08002f74: b.n 0x8002f86 <Reset_Handler+34>
|
6 | 198 *p = 0;
|
7 | 08002f76: ldr r3, [r7, #4]
|
8 | 08002f78: mov.w r2, #0
|
9 | 08002f7c: strb r2, [r3, #0]
|
10 | 197 for (p= (char *) &_ebss; p< (char *) &_estack; p++) {
|
11 | 08002f7e: ldr r3, [r7, #4]
|
12 | 08002f80: add.w r3, r3, #1
|
13 | 08002f84: str r3, [r7, #4]
|
14 | 08002f86: ldr r2, [r7, #4]
|
15 | 08002f88: movw r3, #20480 ; 0x5000
|
16 | 08002f8c: movt r3, #8192 ; 0x2000
|
17 | 08002f90: cmp r2, r3
|
18 | 08002f92: bcc.n 0x8002f76 <Reset_Handler+18>
|
19 | 202 __Init_Data();
|
20 | 08002f94: bl 0x8002fa4 <__Init_Data>
|
21 | 205 main();
|
Er läuft von 08002f6a bis 08002f74 und springt dann in die Zeile:
1 | 08002f86: ldr r2, [r7, #4]
|
Dort bleibt er bis in alle Ewigkeit. Wie kann es sein, dass der PC
immer auf der selben Instruction hängen bleibt?
Meine Theorie ist, dass ein Interrupt ausgelöst wird, und der Debugger
den Sprung in den Interrupt nicht mitbekommt. Ich habe aber keine Ahnung
wie ich das überprüfen kann. Gibt es noch andere Dinge, die ein solches
Verhalten verursachen könnten?