diff options
author | richardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2> | 2013-07-24 09:45:17 +0000 |
---|---|---|
committer | richardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2> | 2013-07-24 09:45:17 +0000 |
commit | ac8797b49c9db2e208783cb31d33fa5ce9c35e90 (patch) | |
tree | 4d30d2b9224694d28a7abb612a42b23801ab5714 /FreeRTOS/Source/portable/GCC/ARM_CM3 | |
parent | 9587ef8e5c4347db3a2c8fd9c05479242b1f2d15 (diff) | |
download | freertos-ac8797b49c9db2e208783cb31d33fa5ce9c35e90.tar.gz |
Add additional critical section to the default tickless implementations.
Update version number for maintenance release.
git-svn-id: http://svn.code.sf.net/p/freertos/code/trunk@1998 1d2547de-c912-0410-9cb9-b8ca96c0e9e2
Diffstat (limited to 'FreeRTOS/Source/portable/GCC/ARM_CM3')
-rw-r--r-- | FreeRTOS/Source/portable/GCC/ARM_CM3/port.c | 20 | ||||
-rw-r--r-- | FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h | 2 |
2 files changed, 12 insertions, 10 deletions
diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c b/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c index 8b0997440..741fb64b5 100644 --- a/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c +++ b/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c @@ -1,5 +1,5 @@ /*
- FreeRTOS V7.5.1 - Copyright (C) 2013 Real Time Engineers Ltd.
+ FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
@@ -543,15 +543,17 @@ void xPortSysTickHandler( void ) /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG
again, then set portNVIC_SYSTICK_LOAD_REG back to its standard
- value. */
+ value. The critical section is used to ensure the tick interrupt
+ can only execute once in the case that the reload register is near
+ zero. */
portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
- portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
-
- vTaskStepTick( ulCompleteTickPeriods );
-
- /* The counter must start by the time the reload value is reset. */
- configASSERT( portNVIC_SYSTICK_CURRENT_VALUE_REG );
- portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
+ portENTER_CRITICAL();
+ {
+ portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
+ vTaskStepTick( ulCompleteTickPeriods );
+ portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
+ }
+ portEXIT_CRITICAL();
}
}
diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h index fbcc1430a..9493f9542 100644 --- a/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h +++ b/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h @@ -1,5 +1,5 @@ /*
- FreeRTOS V7.5.1 - Copyright (C) 2013 Real Time Engineers Ltd.
+ FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|