Folgendes Problem: Ich habe ein Programm geschrieben (mit CrossWorks)
und kann das sowohl debuggen als auch mit "Build and run" laufen lassen.
Ich möchte nun das Discovery von einer USB Powerbank versorgen, aber ich
habe gemerkt, dass der STM32F407 gar nicht erst losläuft, wenn ich das
Board zum Beispiel an USB vom Computer anschliesse. D.H.
Anschliessen->build and run->läuft perfekt->ab und anstecken->läuft
nicht los!
Wenn er nicht läuft, und ich dann den Debugger aktiviere, sehe ich dass
er da hängt:
Detlef Kunz schrieb:> Die Adresse des Sprungzieles muss 0x800037F lauten. ;)
Wie meinst du das? Bzw. was muss ich tun? Sollte ja eigentlich von
selber gehen oder?
Naja, die Codierung für Sprünge im Thumb-Befehlssatz ist so, das das LSB
immer gesetzt ist. Also Sprungziel + 1.
Hmm, allerdings könnte es sein, das das dein Debugger rückübersetzt,
und du uns hier (wie allgemein üblich :( )nur das Stück zeigst, wo er in
eine Endlosschleife gesprungen ist und dort hängt.
Zeig etwas mehr Code. :)
Was soll ich zeigen? Das Problem ist ja, dass er sofort in eine
Endlosschleife geht.
1
<FPU_IRQHandler>
2
E7FE b 0x08000368 <FPU_IRQHandler>
3
<reset_handler>
4
4805 ldr r0, 0x08000380 <reset_wait+0x2>
5
4685 mov sp, r0
6
F000FB3F bl 0x080009F0 <SystemInit>
7
4804 ldr r0, 0x08000384 <reset_wait+0x6>
8
4904 ldr r1, 0x08000388 <reset_wait+0xA>
9
6001 str r1, [r0]
10
F7FFBF06 b.w 0x08000188 <_start>
11
4770 bx lr
12
<reset_wait>
13
E7FE b 0x0800037E <reset_wait>
14
0000 movs r0, r0
15
2002 movs r0, #2
16
ED08E000 stc p0, c14, [r8, #-0]
17
0000 movs r0, r0
18
0800 lsrs r0, r0, #0
Von da hab ich das, das erste ist ja noch ein IRQ Handler, also müsste
der startup-code ja nur das sein oder?
EDIT: Und sorry, dass ich nicht alles zeige, aber ich weiss echt nicht
was man dafür braucht (das ganze CrossWorks Projekt macht ja wohl auch
keinen Sinn...)
Sieht so aus als ob die Hauptschleife deine Programmes verlassen wurde.
Könnte auch sein, das einer der Execeptions nach reset_wait springt.
Ohne den Code hat es keinen Sinn hier zu rätseln.