Gast
#790858
Hallo Ich debugge einen ADUC7000 mit Eclipse und Openocd. So lange ich nur im Ram gebudde, ist alles Ok. Programme im Flash machen hingegen Probleme. Ich muss zu erst das Programm z.B. mit dem Loader von ADI ins Flash schreiben. Openocd kann zwar auch schreiben, aber nur kleine Datenmengen. Bei größeren Programmen bricht OpenOCD ab. Nach dem das Programm ins Flash kopiert wurde, muss der uC erst resetten werden, bevor ich ihn mit openocd ansprechen kann. Das Problem ist, dass der uC nach dem Reset losrennt. So bald ich mit IRQs arbeite, macht das debuggen dann keinen Spaß, da diese dann beim debuggen im "Hintergrund" aktiv sind. Aus diesem Grund hat CrowssWorks den Startupcode so angepasst, dass der Programmcode bei einem Reset nicht automatisch ausgeführt wird. Ich habe mir eine Lösung überlegt. Einen HALT-Befehl scheint es in Assembler für ARM7 nicht zu geben, jedenfalls geht weder "hlt" noch "halt". Der Startupcode beginnt so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Ich habe mir überlegt, den Code an der Startadresse so zu ändern, dass der uC dort stehen bleibt, z.B.: _vectors: b _vectors Openocd springt normlerweise mit dem Befehl: monitor reg pc 0x00000000 zur Startposition und beginnt dann mit debuggen. In diesem Fall will ich aber nicht zu 0x0 sondern dorthin springen, wo tatsächlich der Resethandler liegt. Ich dachte, ich könnte das neue Sprungziel einfach abzählen. ein Befehl ist 32bit, also 4Byte breit. Da der Resethandler mit der 8. Codezeile beginnt, müsste das neue Sprung- ziel 4*8=32=0x20 sein. monitor reg pc 0x00000020 funktioniert aber nicht. Wo ist mein Denkfehler? Vielen Dank, Tilo