@ -76,8 +76,8 @@
/* Save the floating point context, if any. */
/* Save the floating point context, if any. */
FMRXNE R 1 , F P S C R
FMRXNE R 1 , F P S C R
VPUSHNE { D 0 - D 1 5 }
PUSHNE { R 1 }
PUSHNE { R 1 }
VPUSHNE { D 0 - D 1 5 }
/* Save ulPortTaskHasFPUContext itself. */
/* Save ulPortTaskHasFPUContext itself. */
PUSH { R 3 }
PUSH { R 3 }
@ -110,8 +110,8 @@
CMP R 1 , #0
CMP R 1 , #0
/* Restore the floating point context, if any. */
/* Restore the floating point context, if any. */
POPNE { R 0 }
VPOPNE { D 0 - D 1 5 }
VPOPNE { D 0 - D 1 5 }
POPNE { R 0 }
VMSRNE F P S C R , R 0
VMSRNE F P S C R , R 0
# endif / * _ _ A R M _ F P * /
# endif / * _ _ A R M _ F P * /
@ -147,8 +147,15 @@
FreeRTOS_SWI_Handler :
FreeRTOS_SWI_Handler :
/* Save the context of the current task and select a new task to run. */
/* Save the context of the current task and select a new task to run. */
portSAVE_ C O N T E X T
portSAVE_ C O N T E X T
/* Ensure bit 2 of the stack pointer is clear. */
MOV r2 , s p
AND r2 , r2 , #4
SUB s p , s p , r2
LDR R 0 , v T a s k S w i t c h C o n t e x t C o n s t
LDR R 0 , v T a s k S w i t c h C o n t e x t C o n s t
BLX R 0
BLX R 0
portRESTORE_ C O N T E X T
portRESTORE_ C O N T E X T
@ -256,6 +263,11 @@ switch_before_exit:
POP { L R }
POP { L R }
portSAVE_ C O N T E X T
portSAVE_ C O N T E X T
/* Ensure bit 2 of the stack pointer is clear. */
MOV r2 , s p
AND r2 , r2 , #4
SUB s p , s p , r2
/ * Call t h e f u n c t i o n t h a t s e l e c t s t h e n e w t a s k t o e x e c u t e .
/ * Call t h e f u n c t i o n t h a t s e l e c t s t h e n e w t a s k t o e x e c u t e .
vTaskSwitchContext( ) i f v T a s k S w i t c h C o n t e x t ( ) u s e s L D R D o r S T R D
vTaskSwitchContext( ) i f v T a s k S w i t c h C o n t e x t ( ) u s e s L D R D o r S T R D
instructions, o r 8 b y t e a l i g n e d s t a c k a l l o c a t e d d a t a . L R d o e s n o t n e e d
instructions, o r 8 b y t e a l i g n e d s t a c k a l l o c a t e d d a t a . L R d o e s n o t n e e d