Was verwendetst du als Toolchain? Mit den GNU Tools siehts ca. so aus im
Linkerfile:
1 | MEMORY
|
2 | {
|
3 | /* without bootloader */
|
4 | /*FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K*/
|
5 | /* with bootloader */
|
6 | FLASH (rx) : ORIGIN = 0x08003000, LENGTH = 48K
|
7 |
|
8 | SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 10K
|
9 | }
|
Damit erzeugt der Linker Code, welcher bei 0x08003000 startet. Den
Adressen nach zu urteilen würde ich mal sagen, du arbeitest mit einem
Cortex, dh da steht zu Beginn kein ausführbarer Code, sondern nur die
Vektoren mit den Adressen für Stackpointer, Main und allen anderen ISR.
Man kann also nich direkt zu dieser Adressen springen, sondern muss sich
von der zweiten Speicherstelle der Applikation (0x08003000+4) die
Adresse von main holen und dann dorthin springen.
Weiters solltest du beachten das du beim Umschalten von Bootloader zur
Applikation die Startadresse der Vektortabelle für die Applikation setzt
(0x08003000) sonst würden die ISR welche der Bootloader gesetzt hat
angesprungen (0x08000000)