]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/port.c
Add GCC ARM Cortex-M4F MPU port.
[freertos] / FreeRTOS / Source / portable / GCC / ARM_CM3_MPU / port.c
index 9997e5642ce14d04e4461c478f6d3eb48bdd9f13..61268361a8274f6d904333f891d06e5f5bc77c87 100644 (file)
@@ -384,7 +384,17 @@ BaseType_t xPortStartScheduler( void )
        uxCriticalNesting = 0;\r
 \r
        /* Start the first task. */\r
-       __asm volatile( "       svc %0                  \n"\r
+       __asm volatile(\r
+                                       " ldr r0, =0xE000ED08   \n" /* Use the NVIC offset register to locate the stack. */\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " msr msp, r0                   \n" /* Set the msp back to the start of the stack. */\r
+                                       " cpsie i                               \n" /* Globally enable interrupts. */\r
+                                       " cpsie f                               \n"\r
+                                       " dsb                                   \n"\r
+                                       " isb                                   \n"\r
+                                       " svc %0                                \n" /* System call to start first task. */\r
+                                       " nop                                   \n"\r
                                        :: "i" (portSVC_START_SCHEDULER) );\r
 \r
        /* Should not get here! */\r