]> git.sur5r.net Git - freertos/commitdiff
Change the stack alignment when a task first starts in the CM4F GCC, Tasking and...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 16 Apr 2012 18:23:32 +0000 (18:23 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 16 Apr 2012 18:23:32 +0000 (18:23 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1735 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/portable/GCC/ARM_CM4F/port.c
Source/portable/GCC/ARM_CM4F/portmacro.h
Source/portable/RVDS/ARM_CM4F/port.c
Source/portable/RVDS/ARM_CM4F/portmacro.h
Source/portable/Tasking/ARM_CM4F/port.c
Source/portable/Tasking/ARM_CM4F/portmacro.h

index 3a6427cae528a02eff625c2f0ef04867811711ef..3b713cb3fbf9e9aba3abb5fe689778a72f5d74b5 100644 (file)
@@ -126,7 +126,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
 \r
        /* Offset added to account for the way the MCU uses the stack on entry/exit\r
        of interrupts, and to ensure alignment. */\r
-       pxTopOfStack -= 2;\r
+       pxTopOfStack--;\r
 \r
        *pxTopOfStack = portINITIAL_XPSR;       /* xPSR */\r
        pxTopOfStack--;\r
@@ -138,7 +138,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
        pxTopOfStack -= 5;      /* R12, R3, R2 and R1. */\r
        *pxTopOfStack = ( portSTACK_TYPE ) pvParameters;        /* R0 */\r
 \r
-       /* A save method is being used that requiers each task to maintain its\r
+       /* A save method is being used that requires each task to maintain its\r
        own exec return value. */\r
        pxTopOfStack--;\r
        *pxTopOfStack = portINITIAL_EXEC_RETURN;\r
index 6b53008fa498970425554aa60f2876f07f3249d5..9279cf5b1acab69d9ffafed615f839d3ccda9a10 100644 (file)
@@ -140,6 +140,11 @@ extern void vPortExitCritical( void );
 #define portENABLE_INTERRUPTS()                portCLEAR_INTERRUPT_MASK()\r
 #define portENTER_CRITICAL()           vPortEnterCritical()\r
 #define portEXIT_CRITICAL()                    vPortExitCritical()\r
+\r
+/* There are an uneven number of items on the initial stack, so \r
+portALIGNMENT_ASSERT_pxCurrentTCB() will trigger false positive asserts. */\r
+#define portALIGNMENT_ASSERT_pxCurrentTCB ( void )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Task function macros as described on the FreeRTOS.org WEB site. */\r
index 6e70e1801624ffcd2338aa04798098a3d11293d4..35c19313b987f5510e264c7bd556384f0070f76f 100644 (file)
@@ -121,7 +121,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
        \r
        /* Offset added to account for the way the MCU uses the stack on entry/exit\r
        of interrupts, and to ensure alignment. */\r
-       pxTopOfStack -= 2;\r
+       pxTopOfStack--;\r
                \r
        *pxTopOfStack = portINITIAL_XPSR;       /* xPSR */\r
        pxTopOfStack--;\r
@@ -133,7 +133,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
        pxTopOfStack -= 5;      /* R12, R3, R2 and R1. */\r
        *pxTopOfStack = ( portSTACK_TYPE ) pvParameters;        /* R0 */\r
 \r
-       /* A save method is being used that requiers each task to maintain its\r
+       /* A save method is being used that requires each task to maintain its\r
        own exec return value. */\r
        pxTopOfStack--;\r
        *pxTopOfStack = portINITIAL_EXEC_RETURN;\r
index 7b598fd44bd16c2384abeb8f2b193577435b6223..8d42c63342b5dc854a5b7dc64c3c6047e178b464 100644 (file)
@@ -117,6 +117,10 @@ extern void vPortExitCritical( void );
 #define portSET_INTERRUPT_MASK_FROM_ISR()              0;vPortSetInterruptMask()\r
 #define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)   vPortClearInterruptMask();(void)x\r
 \r
+/* There are an uneven number of items on the initial stack, so \r
+portALIGNMENT_ASSERT_pxCurrentTCB() will trigger false positive asserts. */\r
+#define portALIGNMENT_ASSERT_pxCurrentTCB ( void )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Task function macros as described on the FreeRTOS.org WEB site. */\r
index 2e34b8737c070d79e030c812d90b686f60eeda2e..d7db5c5b8608969314de306eaaa516e00e8adb84 100644 (file)
@@ -119,7 +119,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
 \r
        /* Offset added to account for the way the MCU uses the stack on entry/exit\r
        of interrupts, and to ensure alignment. */\r
-       pxTopOfStack -= 2;\r
+       pxTopOfStack--;\r
 \r
        *pxTopOfStack = portINITIAL_XPSR;       /* xPSR */\r
        pxTopOfStack--;\r
@@ -131,7 +131,7 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
        pxTopOfStack -= 5;      /* R12, R3, R2 and R1. */\r
        *pxTopOfStack = ( portSTACK_TYPE ) pvParameters;        /* R0 */\r
 \r
-       /* A save method is being used that requiers each task to maintain its\r
+       /* A save method is being used that requires each task to maintain its\r
        own exec return value. */\r
        pxTopOfStack--;\r
        *pxTopOfStack = portINITIAL_EXEC_RETURN;\r
index 2f671fba1572775b6de1be434a66b305263dfe1a..025bc8d36cd083c14ccc47070b106687cbbee741 100644 (file)
@@ -128,6 +128,11 @@ extern void vPortExitCritical( void );
 #define portENABLE_INTERRUPTS()                portCLEAR_INTERRUPT_MASK()\r
 #define portENTER_CRITICAL()           vPortEnterCritical()\r
 #define portEXIT_CRITICAL()                    vPortExitCritical()\r
+\r
+/* There are an uneven number of items on the initial stack, so \r
+portALIGNMENT_ASSERT_pxCurrentTCB() will trigger false positive asserts. */\r
+#define portALIGNMENT_ASSERT_pxCurrentTCB ( void )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Task function macros as described on the FreeRTOS.org WEB site. */\r