]> git.sur5r.net Git - freertos/commitdiff
Update MPS430X ports so the sleep mode bits are cleared on exit from the tick interrupt.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 11 Aug 2012 20:57:11 +0000 (20:57 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sat, 11 Aug 2012 20:57:11 +0000 (20:57 +0000)
Update heap_4.c.

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

Source/portable/CCS/MSP430X/port.c
Source/portable/CCS/MSP430X/portext.asm
Source/portable/IAR/MSP430X/port.c
Source/portable/IAR/MSP430X/portext.s43
Source/portable/MemMang/heap_4.c

index ad741855582f673bad0efb8aef62f828c15bf687..e61eda440cd857f60eca74018234c5002cc22700 100644 (file)
@@ -213,6 +213,7 @@ interrupt void vTickISREntry( void )
 {\r
 extern void vPortTickISR( void );\r
 \r
+       __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );\r
        #if configUSE_PREEMPTION == 1\r
                extern void vPortPreemptiveTickISR( void );\r
                vPortPreemptiveTickISR();\r
index 7a4deebd67d79ef1f9a90c7f430c1982ed286988..a546876ee836edf0214e6557a7859fb5f7b00865 100644 (file)
@@ -88,12 +88,6 @@ portRESTORE_CONTEXT .macro
        pop_x   r15\r
        mov.w   r15, &usCriticalNesting\r
        popm_x  #12, r15\r
-               \r
-       ;The last thing on the stack will be the status register.\r
-    ;Ensure the power down bits are clear ready for the next\r
-    ;time this power down register is popped from the stack.\r
-       bic.w   #0xf0, 0( sp )\r
-               \r
        pop.w   sr\r
        ret_x\r
        .endm\r
index 6dd8826ee44b3bf5fdec553953920d2292d7cf6f..daa9aee94ecc03c6883ac088aec7cd6688d8e64a 100644 (file)
@@ -214,6 +214,7 @@ __interrupt __raw void vTickISREntry( void )
 {\r
 extern void vPortTickISR( void );\r
 \r
+       __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );\r
        vPortTickISR();\r
 }\r
 \r
index 3d3d7a4cf830d56fe954177e8d59b0b6a6639552..1cd98b57c5037f16ccf55ebc4befbdf2ed03e7b9 100644 (file)
@@ -95,12 +95,6 @@ portRESTORE_CONTEXT macro
        pop_x   r15\r
        mov.w   r15, &usCriticalNesting\r
        popm_x  #12, r15\r
-               \r
-       /* The last thing on the stack will be the status register.\r
-       Ensure the power down bits are clear ready for the next\r
-       time this power down register is popped from the stack. */\r
-       bic.w   #0xf0, 0( sp )\r
-               \r
        pop.w   sr\r
        reta\r
        endm\r
@@ -115,23 +109,25 @@ portRESTORE_CONTEXT macro
  *\r
  * If the preemptive scheduler is in use a context switch can also occur.\r
  */\r
-       \r
+\r
        RSEG CODE\r
        EVEN\r
-       \r
+\r
 vPortTickISR:\r
-       \r
+\r
        /* The sr is not saved in portSAVE_CONTEXT() because vPortYield() needs\r
-       to save it manually before it gets modified (interrupts get disabled). */\r
+       to save it manually before it gets modified (interrupts get disabled).\r
+       Entering through this interrupt means the SR is already on the stack, but\r
+       this keeps the stack frames identical. */\r
        push.w sr\r
        portSAVE_CONTEXT\r
-                               \r
+\r
        calla   #vTaskIncrementTick\r
 \r
        #if configUSE_PREEMPTION == 1\r
                calla   #vTaskSwitchContext\r
        #endif\r
-               \r
+\r
        portRESTORE_CONTEXT\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -139,21 +135,21 @@ vPortTickISR:
  * Manual context switch called by the portYIELD() macro.\r
  */\r
        EVEN\r
-       \r
+\r
 vPortYield:\r
 \r
        /* The sr needs saving before it is modified. */\r
        push.w  sr\r
-       \r
+\r
        /* Now the SR is stacked we can disable interrupts. */\r
-       dint    \r
+       dint\r
        nop\r
-                               \r
+\r
        /* Save the context of the current task. */\r
-       portSAVE_CONTEXT                        \r
+       portSAVE_CONTEXT\r
 \r
        /* Select the next task to run. */\r
-       calla   #vTaskSwitchContext             \r
+       calla   #vTaskSwitchContext\r
 \r
        /* Restore the context of the new task. */\r
        portRESTORE_CONTEXT\r
@@ -165,7 +161,7 @@ vPortYield:
  * the context of the first task.\r
  */\r
        EVEN\r
-       \r
+\r
 xPortStartScheduler:\r
 \r
        /* Setup the hardware to generate the tick.  Interrupts are disabled\r
@@ -175,6 +171,6 @@ xPortStartScheduler:
        /* Restore the context of the first task that is going to run. */\r
        portRESTORE_CONTEXT\r
 /*-----------------------------------------------------------*/\r
-               \r
+\r
        END\r
-               \r
+\r
index 794684e90c81d08970e9b1cdd8256cf6c5b2bcec..f04f7d6d25b4e07a96681e76f49c9ae9675b5091 100644 (file)
@@ -356,7 +356,7 @@ unsigned char *puc;
 }\r
 \r
 \r
-#define INCLUDE_TEST_CODE 1\r
+#define INCLUDE_TEST_CODE 0\r
 #if INCLUDE_TEST_CODE == 1\r
 \r
 #define heapMAX_TEST_BLOCKS 6\r
@@ -366,6 +366,7 @@ void vTestHeap4( void )
 void *pvReturned;\r
 static void *pvUsedBlocks[ heapMAX_TEST_BLOCKS ];\r
 unsigned long ulIndex = 0, ulSize, ulRandSample;\r
+size_t xSize1, xSize2, xSize3;\r
 static const unsigned long ulCombinations[ 6 ][ 3 ] =\r
 {\r
        { 0, 1, 2 },\r
@@ -530,13 +531,17 @@ static const unsigned long ulCombinations[ 6 ][ 3 ] =
        }\r
 \r
        /* Do the same, but using random block sizes. */\r
-       for( ulRandSample = 0; ulRandSample < 0x5ffff; ulRandSample++ )\r
+       for( ulRandSample = 0; ulRandSample < 0xffffffUL; ulRandSample++ )\r
        {\r
+               xSize1 = rand();\r
+               xSize2 = rand();\r
+               xSize3 = rand();\r
+\r
                for( ulIndex = 0; ulIndex < 6; ulIndex++ )\r
                {\r
-                       pvUsedBlocks[ 0 ] = pvPortMalloc( rand() );\r
-                       pvUsedBlocks[ 1 ] = pvPortMalloc( rand() );\r
-                       pvUsedBlocks[ 2 ] = pvPortMalloc( rand() );\r
+                       pvUsedBlocks[ 0 ] = pvPortMalloc( xSize1 );\r
+                       pvUsedBlocks[ 1 ] = pvPortMalloc( xSize2 );\r
+                       pvUsedBlocks[ 2 ] = pvPortMalloc( xSize3 );\r
 \r
                        vPortFree( pvUsedBlocks[ ulCombinations[ ulIndex ][ 0 ] ] );\r
                        vPortFree( pvUsedBlocks[ ulCombinations[ ulIndex ][ 1 ] ] );\r