]> git.sur5r.net Git - freertos/commitdiff
Convert mpre ports to use xTaskIncrementTick() in place of vTaskIncrementTick().
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 6 Jun 2013 16:06:48 +0000 (16:06 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 6 Jun 2013 16:06:48 +0000 (16:06 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1916 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/GCC/MSP430F449/port.c
FreeRTOS/Source/portable/GCC/NiosII/port.c
FreeRTOS/Source/portable/GCC/PPC405_Xilinx/portasm.S
FreeRTOS/Source/portable/GCC/PPC440_Xilinx/portasm.S
FreeRTOS/Source/portable/GCC/RX100/port.c
FreeRTOS/Source/portable/GCC/RX600/port.c
FreeRTOS/Source/portable/GCC/STR75x/portISR.c
FreeRTOS/Source/portable/GCC/TriCore_1782/port.c
FreeRTOS/Source/portable/IAR/78K0R/portasm.s26
FreeRTOS/Source/portable/IAR/ARM_CM0/port.c
FreeRTOS/Source/portable/IAR/ARM_CM4F/port.c

index 2f5eb42f98fdbd1e4dbb91cb64282666fc967299..3c7d94ddfda26ee0aa5ccc50fc257bb6f6a0b20b 100644 (file)
@@ -348,8 +348,10 @@ static void prvSetupTimerInterrupt( void )
 \r
                /* Increment the tick count then switch to the highest priority task\r
                that is ready to run. */\r
-               vTaskIncrementTick();\r
-               vTaskSwitchContext();\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       vTaskSwitchContext();\r
+               }\r
 \r
                /* Restore the context of the new task. */\r
                portRESTORE_CONTEXT();\r
@@ -365,7 +367,7 @@ static void prvSetupTimerInterrupt( void )
        interrupt (TIMERA0_VECTOR) prvTickISR( void );\r
        interrupt (TIMERA0_VECTOR) prvTickISR( void )\r
        {\r
-               vTaskIncrementTick();\r
+               xTaskIncrementTick();\r
        }\r
 #endif\r
 \r
index 1c29c4bce1b6f0595cc54c3ee9b38e657632e98b..c5f12792a8a7e837289a0bd77bf263234d7b146e 100644 (file)
@@ -204,14 +204,12 @@ void prvSetupTimerInterrupt( void )
 \r
 void vPortSysTickHandler( void * context, alt_u32 id )\r
 {\r
-       /* Increment the Kernel Tick. */\r
-       vTaskIncrementTick();\r
-\r
-       /* If using preemption, also force a context switch. */\r
-       #if configUSE_PREEMPTION == 1\r
+       /* Increment the kernel tick. */\r
+       if( xTaskIncrementTick() != pdFALSE )\r
+       {\r
         vTaskSwitchContext();\r
-       #endif\r
-\r
+       }\r
+               \r
        /* Clear the interrupt. */\r
        IOWR_ALTERA_AVALON_TIMER_STATUS( SYS_CLK_BASE, ~ALTERA_AVALON_TIMER_STATUS_TO_MSK );\r
 }\r
index 65ad8b2c0f876a9fb2ad8ab4a3885ead46aa72d4..ee686a3630fdf224decf86383e72a3316e06d64a 100644 (file)
@@ -76,7 +76,7 @@
 \r
        .extern pxCurrentTCB\r
        .extern vTaskSwitchContext\r
-       .extern vTaskIncrementTick\r
+       .extern xTaskIncrementTick\r
        .extern vPortISRHandler\r
 \r
        .global vPortStartFirstTask\r
@@ -203,7 +203,7 @@ vPortYield:
 vPortTickISR:\r
 \r
        portSAVE_STACK_POINTER_AND_LR\r
-       bl vTaskIncrementTick\r
+       bl xTaskIncrementTick\r
        \r
        #if configUSE_PREEMPTION == 1\r
                bl vTaskSwitchContext\r
index 65ad8b2c0f876a9fb2ad8ab4a3885ead46aa72d4..ee686a3630fdf224decf86383e72a3316e06d64a 100644 (file)
@@ -76,7 +76,7 @@
 \r
        .extern pxCurrentTCB\r
        .extern vTaskSwitchContext\r
-       .extern vTaskIncrementTick\r
+       .extern xTaskIncrementTick\r
        .extern vPortISRHandler\r
 \r
        .global vPortStartFirstTask\r
@@ -203,7 +203,7 @@ vPortYield:
 vPortTickISR:\r
 \r
        portSAVE_STACK_POINTER_AND_LR\r
-       bl vTaskIncrementTick\r
+       bl xTaskIncrementTick\r
        \r
        #if configUSE_PREEMPTION == 1\r
                bl vTaskSwitchContext\r
index 3180202fc43f909c6e484fb1b310c2a88f9e6792..dbd8a5b4e0e5e4e44f2a299997d5d93543763ee8 100644 (file)
@@ -111,7 +111,7 @@ CMT. */
 #endif\r
 \r
 /* These macros allow a critical section to be added around the call to\r
-vTaskIncrementTick(), which is only ever called from interrupts at the kernel\r
+xTaskIncrementTick(), which is only ever called from interrupts at the kernel\r
 priority - ie a known priority.  Therefore these local macros are a slight\r
 optimisation compared to calling the global SET/CLEAR_INTERRUPT_MASK macros,\r
 which would require the old IPL to be read first and stored in a local variable. */\r
@@ -439,15 +439,13 @@ void vPortTickISR( void )
        necessitates.  Ensure IPL is at the max syscall value first. */\r
        portDISABLE_INTERRUPTS_FROM_KERNEL_ISR();\r
        {\r
-               vTaskIncrementTick();\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       taskYIELD();\r
+               }\r
        }\r
        portENABLE_INTERRUPTS_FROM_KERNEL_ISR();\r
 \r
-       /* Only select a new task if the preemptive scheduler is being used. */\r
-       #if( configUSE_PREEMPTION == 1 )\r
-               taskYIELD();\r
-       #endif\r
-\r
        #if configUSE_TICKLESS_IDLE == 1\r
        {\r
                /* The CPU woke because of a tick. */\r
index fe6bd1949eca0975f29112fe8aa328fb26d1fca6..29731368be92721a27aed8bb493fe1a3f58f7e69 100644 (file)
@@ -94,7 +94,7 @@ PSW is set with U and I set, and PM and IPL clear. */
 #define portINITIAL_FPSW    ( ( portSTACK_TYPE ) 0x00000100 )\r
 \r
 /* These macros allow a critical section to be added around the call to\r
-vTaskIncrementTick(), which is only ever called from interrupts at the kernel \r
+xTaskIncrementTick(), which is only ever called from interrupts at the kernel \r
 priority - ie a known priority.  Therefore these local macros are a slight \r
 optimisation compared to calling the global SET/CLEAR_INTERRUPT_MASK macros, \r
 which would require the old IPL to be read first and stored in a local variable. */\r
@@ -364,14 +364,12 @@ void vTickISR( void )
        necessitates.  Ensure IPL is at the max syscall value first. */\r
        portDISABLE_INTERRUPTS_FROM_KERNEL_ISR();\r
        {\r
-               vTaskIncrementTick(); \r
+               if( TaskIncrementTick() != pdFALSE )\r
+               {\r
+                       taskYIELD();\r
+               }\r
        }\r
        portENABLE_INTERRUPTS_FROM_KERNEL_ISR();\r
-       \r
-       /* Only select a new task if the preemptive scheduler is being used. */\r
-       #if( configUSE_PREEMPTION == 1 )\r
-               taskYIELD();\r
-       #endif\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index f08069b02ac53e3528860e4b88da68e5f5f07746..dd1b9b5d110352bf64c062c0a83c4f30b6130aac 100644 (file)
@@ -137,11 +137,10 @@ void vPortTickISR( void )
 {\r
        /* Increment the RTOS tick count, then look for the highest priority \r
        task that is ready to run. */\r
-       vTaskIncrementTick();\r
-       \r
-       #if configUSE_PREEMPTION == 1\r
+       if( xTaskIncrementTick() != pdFALSE )\r
+       {       \r
                vTaskSwitchContext();\r
-       #endif\r
+       }\r
                        \r
        /* Ready for the next interrupt. */\r
        TB_ClearITPendingBit( TB_IT_Update );   \r
index 9616d4ab9e7a07094a477d21499941135ddf9d54..f66016e24dd840cecbc08d905706f7b6ef12d539 100644 (file)
@@ -335,6 +335,7 @@ unsigned long ulSavedInterruptMask;
 unsigned long *pxUpperCSA = NULL;\r
 unsigned long xUpperCSA = 0UL;\r
 extern volatile unsigned long *pxCurrentTCB;\r
+long lYieldRequired;\r
 \r
        /* Just to avoid compiler warnings about unused parameters. */\r
        ( void ) iArg;\r
@@ -365,11 +366,11 @@ extern volatile unsigned long *pxCurrentTCB;
        ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();\r
        {\r
                /* Increment the Tick. */\r
-               vTaskIncrementTick();\r
+               lYieldRequired = xTaskIncrementTick();\r
        }\r
        portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );\r
 \r
-       #if configUSE_PREEMPTION == 1\r
+       if( lYieldRequired != pdFALSE )\r
        {\r
                /* Save the context of a task.\r
                The upper context is automatically saved when entering a trap or interrupt.\r
@@ -400,7 +401,6 @@ extern volatile unsigned long *pxCurrentTCB;
                CPU_SRC0.bits.SETR = 0;\r
                _isync();\r
        }\r
-       #endif\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index 536f91f89c8c1d4a85caf00dc0317ae798b48f16..30255ee8fd06e5a960cc35dfede34d10746fe44f 100644 (file)
@@ -68,7 +68,7 @@
 ; Functions used by scheduler\r
 ;------------------------------------------------------------------------------\r
        EXTERN    vTaskSwitchContext\r
-       EXTERN    vTaskIncrementTick\r
+       EXTERN    xTaskIncrementTick\r
 \r
 ; Tick ISR Prototype\r
 ;------------------------------------------------------------------------------\r
@@ -133,7 +133,7 @@ vPortStart:
 MD_INTTM05:\r
 \r
        portSAVE_CONTEXT                        ; Save the context of the current task.\r
-       call      vTaskIncrementTick    ; Call the timer tick function.\r
+       call      xTaskIncrementTick    ; Call the timer tick function.\r
 #if configUSE_PREEMPTION == 1\r
        call      vTaskSwitchContext    ; Call the scheduler to select the next task.\r
 #endif\r
index 93c415d0302308b92d68a3907eb60e18bc2c8e4c..c5a1ff085e02415710e3b974a85762d1a7b25103 100644 (file)
@@ -210,14 +210,14 @@ void xPortSysTickHandler( void )
 {\r
 unsigned long ulDummy;\r
 \r
-       /* If using preemption, also force a context switch. */\r
-       #if configUSE_PREEMPTION == 1\r
-               *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;\r
-       #endif\r
-\r
        ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();\r
        {\r
-               vTaskIncrementTick();\r
+               /* Increment the RTOS tick. */\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       /* Pend a context switch. */\r
+                       *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;\r
+               }\r
        }\r
        portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );\r
 }\r
index a9264f3fcf86bb70f00bbe329a3e8319dc1665d8..a7e28ce30072c56b984940bea5844611b2efd40e 100644 (file)
@@ -275,11 +275,6 @@ void vPortExitCritical( void )
 \r
 void xPortSysTickHandler( void )\r
 {\r
-       /* If using preemption, also force a context switch. */\r
-       #if configUSE_PREEMPTION == 1\r
-               portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
-       #endif\r
-\r
        /* Only reset the systick load register if configUSE_TICKLESS_IDLE is set to\r
        1.  If it is set to 0 tickless idle is not being used.  If it is set to a\r
        value other than 0 or 1 then a timer other than the SysTick is being used\r
@@ -290,7 +285,12 @@ void xPortSysTickHandler( void )
 \r
        ( void ) portSET_INTERRUPT_MASK_FROM_ISR();\r
        {\r
-               vTaskIncrementTick();\r
+               /* Increment the RTOS tick. */\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       /* Pend a context switch. */\r
+                       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
+               }\r
        }\r
        portCLEAR_INTERRUPT_MASK_FROM_ISR( 0 );\r
 }\r