]> git.sur5r.net Git - freertos/commitdiff
Add configCLEAR_TICK_INTERRUPT() to the IAR and RVDS Cortex-A9 ports.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 17:02:52 +0000 (17:02 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 17:02:52 +0000 (17:02 +0000)
Replace LDMFD with POP instructions in IAR and RVDS Cortex-A9 ports.
Replace branch to address with indirect branch and exchange to address in register in the IAR and RVDS Cortex-A9 ports.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2193 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/include/list.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/portable/IAR/ARM_CA9/port.c
FreeRTOS/Source/portable/IAR/ARM_CA9/portASM.h
FreeRTOS/Source/portable/IAR/ARM_CA9/portASM.s
FreeRTOS/Source/portable/RVDS/ARM_CA9/port.c
FreeRTOS/Source/portable/RVDS/ARM_CA9/portASM.s
FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.inc
FreeRTOS/Source/tasks.c

index 3f40a6737034041d2a92e961580917713fde4318..f31cc55885f30857d12a0840095aaf0362ca8ee2 100644 (file)
@@ -218,7 +218,7 @@ typedef struct xLIST
 /*\r
  * Return the list item at the head of the list.\r
  *\r
- * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY\r
+ * \page listGET_NEXT listGET_NEXT\r
  * \ingroup LinkedList\r
  */\r
 #define listGET_NEXT( pxListItem )     ( ( pxListItem )->pxNext )\r
index 39de192f510cead4d71f2a00ab9985a55f0a1d04..614565b88928ebf190bc1febd258f531a378e5de 100644 (file)
@@ -82,6 +82,9 @@ extern "C" {
  *----------------------------------------------------------*/\r
 \r
 #define tskKERNEL_VERSION_NUMBER "V8.0.0 release candidate 1"\r
+#define tskKERNEL_VERSION_MAJOR 8\r
+#define tskKERNEL_VERSION_MINOR 0\r
+#define tskKERNEL_VERSION_BUILD 0\r
 \r
 /**\r
  * task. h\r
index 75c5eadeb3e2f0854a314bba37f107498b22ef42..5722d4772b7d7f8a9afb36afae1a6eff628cd4bc 100644 (file)
        #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )\r
 #endif\r
 \r
+#ifndef configCLEAR_TICK_INTERRUPT\r
+       #define configCLEAR_TICK_INTERRUPT()\r
+#endif\r
+\r
 /* A critical section is exited when the critical section nesting count reaches\r
 this value. */\r
 #define portNO_CRITICAL_NESTING                        ( ( uint32_t ) 0 )\r
@@ -131,7 +135,6 @@ context. */
 /* Constants required to setup the initial task context. */\r
 #define portINITIAL_SPSR                               ( ( StackType_t ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */\r
 #define portTHUMB_MODE_BIT                             ( ( StackType_t ) 0x20 )\r
-#define portINTERRUPT_ENABLE_BIT               ( 0x80UL )\r
 #define portTHUMB_MODE_ADDRESS                 ( 0x01UL )\r
 \r
 /* Used by portASSERT_IF_INTERRUPT_PRIORITY_INVALID() when ensuring the binary\r
@@ -354,6 +357,7 @@ void FreeRTOS_Tick_Handler( void )
 \r
        /* Ensure all interrupt priorities are active again. */\r
        portCLEAR_INTERRUPT_MASK();\r
+       configCLEAR_TICK_INTERRUPT();\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index b2d47c82c43983b83d408db19edfafeef02ddfb4..4c8cb5608c818e8b40f716f2022effc9144fd637 100644 (file)
@@ -113,7 +113,7 @@ portRESTORE_CONTEXT macro
        CMP             R1, #0\r
 \r
        ; Restore the floating point context, if any\r
-       LDMFDNE SP!, {R0}\r
+       POPNE   {R0}\r
        VPOPNE  {D16-D31}\r
        VPOPNE  {D0-D15}\r
        VMSRNE  FPSCR, R0\r
index 806ec09707d755e26426e419342a4b074472a3fe..0a13b3f8f7f083c255b2380ac69ac482088928c4 100644 (file)
@@ -130,7 +130,8 @@ FreeRTOS_IRQ_Handler
 \r
        ; Call the interrupt handler\r
        PUSH    {r0-r3, lr}\r
-       BL              vApplicationIRQHandler\r
+       LDR             r1, =vApplicationIRQHandler\r
+       BLX             r1\r
        POP             {r0-r3, lr}\r
        ADD             sp, sp, r2\r
 \r
@@ -184,7 +185,8 @@ switch_before_exit
        ; vTaskSwitchContext() if vTaskSwitchContext() uses LDRD or STRD\r
        ; instructions, or 8 byte aligned stack allocated data.  LR does not need\r
        ; saving as a new LR will be loaded by portRESTORE_CONTEXT anyway.\r
-       BL              vTaskSwitchContext\r
+       LDR             r0, =vTaskSwitchContext\r
+       BLX             r0\r
 \r
        ; Restore the context of, and branch to, the task selected to execute next.\r
        portRESTORE_CONTEXT\r
index 04f22a4b0923cd94161bcea5ec8e7d212dfdde0f..f67aba7433845350ce72b2e79c659cd32f674a5a 100644 (file)
        #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )\r
 #endif\r
 \r
+#ifndef configCLEAR_TICK_INTERRUPT\r
+       #define configCLEAR_TICK_INTERRUPT()\r
+#endif\r
+\r
 /* The number of bits to shift for an interrupt priority is dependent on the\r
 number of bits implemented by the interrupt controller. */\r
 #if configUNIQUE_INTERRUPT_PRIORITIES == 16\r
@@ -167,7 +171,6 @@ point is zero. */
 /* Constants required to setup the initial task context. */\r
 #define portINITIAL_SPSR                               ( ( StackType_t ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */\r
 #define portTHUMB_MODE_BIT                             ( ( StackType_t ) 0x20 )\r
-#define portINTERRUPT_ENABLE_BIT               ( 0x80UL )\r
 #define portTHUMB_MODE_ADDRESS                 ( 0x01UL )\r
 \r
 /* Masks all bits in the APSR other than the mode bits. */\r
@@ -393,6 +396,7 @@ void FreeRTOS_Tick_Handler( void )
 \r
        /* Ensure all interrupt priorities are active again. */\r
        portCLEAR_INTERRUPT_MASK();\r
+       configCLEAR_TICK_INTERRUPT();\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
index e3058d088c4a5b913e573840bff13ee9ee18635e..0dff19e0b47f69045a55943f58e66bf27ff674ca 100644 (file)
@@ -126,7 +126,8 @@ FreeRTOS_IRQ_Handler
 \r
        ; Call the interrupt handler\r
        PUSH    {r0-r3, lr}\r
-       BL              vApplicationIRQHandler\r
+       LDR             r1, =vApplicationIRQHandler\r
+       BLX             r1\r
        POP             {r0-r3, lr}\r
        ADD             sp, sp, r2\r
 \r
@@ -180,7 +181,8 @@ switch_before_exit
        ; vTaskSwitchContext() if vTaskSwitchContext() uses LDRD or STRD\r
        ; instructions, or 8 byte aligned stack allocated data.  LR does not need\r
        ; saving as a new LR will be loaded by portRESTORE_CONTEXT anyway.\r
-       BL              vTaskSwitchContext\r
+       LDR             r0, =vTaskSwitchContext\r
+       BLX             r0\r
 \r
        ; Restore the context of, and branch to, the task selected to execute next.\r
        portRESTORE_CONTEXT\r
index 34df9b5e8090c78523d3c3ff86ee9b7521a80390..c91e5a6c5cbff06c77fcb01baaf02bf9e469b9e6 100644 (file)
@@ -120,7 +120,7 @@ IRQ_MODE                    EQU             0x12
        CMP             R1, #0\r
 \r
        ; Restore the floating point context, if any\r
-       LDMFDNE SP!, {R0}\r
+       POPNE   {R0}\r
        VPOPNE  {D16-D31}\r
        VPOPNE  {D0-D15}\r
        VMSRNE  FPSCR, R0\r
index 91df4ec304bc882670504459feaf6ee26ddf6c9f..51747b5e6949d3daa5391d2b738744aa77ec5a29 100644 (file)
@@ -1678,7 +1678,9 @@ UBaseType_t uxSavedInterruptStatus;
        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\r
 \r
        uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();\r
-       xReturn = xTickCount;\r
+       {\r
+               xReturn = xTickCount;\r
+       }\r
        portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\r
 \r
        return xReturn;\r