common: Implement TimeAndPos::distance_cm().
[gps-watch.git] / src / common / startup.c
index daa8906c38f1c36fa7f8127095772bf2cc168791..256863ff213709d42ed8526f87fb2b796e2d2d8b 100644 (file)
@@ -150,3 +150,18 @@ Dummy_Handler (void)
        for (;;) {
        }
 }
+
+__attribute__ ((noreturn))
+void
+jump_to_application (volatile uint32_t *address)
+{
+       volatile uint32_t *vtor = (uint32_t *) 0xe000ed08;
+       *vtor = (uint32_t) address;
+
+       asm volatile ("" ::: "memory");
+       asm volatile ("msr msp, %0" :: "r" (*(address + 0)) : "sp");
+       asm volatile ("bx %0" :: "r" (*(address + 1)));
+
+       for (;;) {
+       }
+}