Hallo zusammen,
ich frage mich gerade warum dieser Assemblercode:
1 | .section .text.Reset_Handler
|
2 | Reset_Handler:
|
Zwar funktioniert wenn man ihn debuggt, wenn das Board aber einen
'kaltstart' (also Spannnung weg, Spannung hin) macht, bleibt der Chip am
ersten Befehl des Reset-Handler stehen und das ST-LINK sagt 'Core
halted'.
Ändere ich den Code wie folgt, um dem Assembler mitzuteilen dass
'Reset_Handler' vom Typ Function ist, läuft der Core auch bei einem
Kaltstart normal an und führt den Code aus.
1 | .section .text.Reset_Handler
|
2 | .type Reset_Handler, %function
|
3 | Reset_Handler:
|
Ich könnte mir denken dass es was damit zu tun hat dass ab Cortex-M3 das
LeastSignificantBit in Addressen '1' sein soll, damit der Core weiß dass
das Ziel als Thumbcode interpretiert wird.
Wobei in meinem Buch auch steht dass es eigentlich einen Fault geben
müsste wenn man falsche Opcodes hat.
Bin ich auf dem Holzweg?
Hat jemand ne Erklärung für dieses Verhalten ?
Es handelt sich um ein STM32F4Discovery und den Rest der main.s habe ich
mal angehängt. Ich hatte einfach nur versucht dass geringst mögliche
Assembler-Construct zu bauen.
Mfg,
Thomas