]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/GCC/ARM_CM0/port.c
Prepare for V9.0.0 release.
[freertos] / FreeRTOS / Source / portable / GCC / ARM_CM0 / port.c
index 6654a938c9f3019760eddc5b7691ab19937a8da6..e9cf103b909f89a5cc51b516b7c6ef7cd4c63f9a 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V8.2.1 - Copyright (C) 2015 Real Time Engineers Ltd.\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -8,7 +8,7 @@
 \r
     FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
 \r
     ***************************************************************************\r
     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
@@ -92,7 +92,7 @@
 #define portINITIAL_XPSR                       ( 0x01000000 )\r
 \r
 /* Let the user override the pre-loading of the initial LR with the address of\r
-prvTaskExitError() in case is messes up unwinding of the stack in the\r
+prvTaskExitError() in case it messes up unwinding of the stack in the\r
 debugger. */\r
 #ifdef configTASK_RETURN_ADDRESS\r
        #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\r
@@ -183,12 +183,15 @@ void vPortStartFirstTask( void )
        "       msr psp, r0                                     \n" /* This is now the new top of stack to use in the task. */\r
        "       movs r0, #2                                     \n" /* Switch to the psp stack. */\r
        "       msr CONTROL, r0                         \n"\r
+       "       isb                                                     \n"\r
        "       pop {r0-r5}                                     \n" /* Pop the registers that are saved automatically. */\r
        "       mov lr, r5                                      \n" /* lr is now in r5. */\r
+       "       pop {r3}                                        \n" /* Return address is now in r3. */\r
+       "       pop {r2}                                        \n" /* Pop and discard XPSR. */\r
        "       cpsie i                                         \n" /* The first task has its context and interrupts can be enabled. */\r
-       "       pop {pc}                                        \n" /* Finally, pop the PC to jump to the user defined task code. */\r
+       "       bx r3                                           \n" /* Finally, jump to the user defined task code. */\r
        "                                                               \n"\r
-       "       .align 2                                        \n"\r
+       "       .align 4                                        \n"\r
        "pxCurrentTCBConst2: .word pxCurrentTCB   "\r
                                  );\r
 }\r
@@ -331,7 +334,7 @@ void xPortPendSVHandler( void )
        "                                                                               \n"\r
        "       bx r3                                                           \n"\r
        "                                                                               \n"\r
-       "       .align 2                                                        \n"\r
+       "       .align 4                                                        \n"\r
        "pxCurrentTCBConst: .word pxCurrentTCB    "\r
        );\r
 }\r