]> git.sur5r.net Git - freertos/commitdiff
Basic cooperative reg test tasks working.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 25 Feb 2008 11:18:23 +0000 (11:18 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 25 Feb 2008 11:18:23 +0000 (11:18 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@219 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/portable/GCC/PPC405/port.c
Source/portable/GCC/PPC405/portasm.s
Source/portable/GCC/PPC405/portmacro.h

index 1455b037bbe17d7f7da388fc8932b202d16c2b7a..774ad92854f3cf9eda36bfbcd72581874b1c2b61 100644 (file)
@@ -162,9 +162,9 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
        pxTopOfStack--;\r
        *pxTopOfStack = portINITIAL_MSR;/* SRR1. */\r
        pxTopOfStack--;\r
-       *pxTopOfStack = 0x00000000UL;/* Next LR. */\r
+       *pxTopOfStack = ( portSTACK_TYPE ) vStartFirstTask;/* Next LR. */\r
        pxTopOfStack--;\r
-       *pxTopOfStack = portINITIAL_MSR;/* Backchain. */\r
+       *pxTopOfStack = 0x00000000UL;;/* Backchain. */\r
 //     pxTopOfStack--;\r
 \r
        return pxTopOfStack;\r
index 43dfeb2219e98c95e0134b7d548144de1274bbf0..da8d9f6d7942204aa498412097bfd9ef9b52e483 100644 (file)
@@ -11,7 +11,7 @@
 .set portGPR_OFFSET, 32\r
 .set portCR_OFFSET, 28\r
 .set portXER_OFFSET, 24\r
-.set portLR_OFFSET, 20\r
+.set portLR_OFFSET, 16\r
 .set portCTR_OFFSET, 16\r
 .set portUSPRG0_OFFSET, 12\r
 .set portSRR0_OFFSET, 8\r
        # Store the stack pointer into the TCB\r
        stw             SP,     0( R2 )\r
 \r
+       # Save the link register\r
+       stwu    R1, -24( R1 )\r
+       mflr    R0\r
+       stw             R31, 20( R1 )\r
+       stw             R0, 28( R1 )\r
+       mr              R31, r1\r
+\r
 .endm\r
 \r
 .macro portEXIT_SWITCHING_ISR\r
 \r
+       # Restore the link register\r
+       lwz             R11, 0( R1 )\r
+       lwz             R0, 4( R11 )\r
+       mtlr    R0\r
+       lwz             R31, -4( R11 )\r
+       mr              R1, R11\r
+\r
        # Get the address of the TCB.\r
        xor             R0, R0, R0\r
        addis   SP, R0, pxCurrentTCB@ha\r
        # Get the task stack pointer from the TCB.\r
        lwz             SP, 0( SP )\r
 \r
-       # Load up the LR for the correct return.\r
-       lwz     R0,LRField(R1)\r
-       mtlr    R0\r
-\r
-\r
 .endm\r
 \r
 \r
index 478c1174e354193a276a0b7be62f3d607829a0d0..dc895d215db82ceadecd538d3557697b2c75f8d0 100644 (file)
@@ -90,7 +90,7 @@ void vPortExitCritical( void );
 \r
 /* Task utilities. */\r
 void vPortYield( void );\r
-#define portYIELD() asm volatile ( "SC" )\r
+#define portYIELD() asm volatile ( "SC \n\t NOP" )\r
 #define portYIELD_FROM_ISR()\r
 /*-----------------------------------------------------------*/\r
 \r