]> git.sur5r.net Git - freertos/commitdiff
Add proper 8 byte alignment support.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 30 Jun 2009 16:32:36 +0000 (16:32 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 30 Jun 2009 16:32:36 +0000 (16:32 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@788 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/include/portable.h
Source/portable/MemMang/heap_1.c
Source/portable/MemMang/heap_2.c
Source/tasks.c

index dca1e9f6fef478a6b06c5c0366ff81878a20f927..7498491d86301175313c22fbe0e1c11234467d2c 100644 (file)
        #include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"\r
 #endif\r
 \r
+#ifdef GCC_PPC440\r
+       #include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h"\r
+#endif\r
+\r
 #ifdef _16FX_SOFTUNE\r
        #include "..\..\Source\portable\Softune\MB96340\portmacro.h"\r
 #endif\r
index 126609b3fd83b50108e8fb4a5cc0ae491411da4b..7dff39e50a0c620db765852867bc713e71b73184 100644 (file)
        licensing and training services.\r
 */\r
 \r
-/* \r
-\r
-Changes between V2.5.1 and V2.5.1\r
-\r
-       + The memory pool has been defined within a struct to ensure correct memory\r
-         alignment on 32bit systems.\r
-\r
-Changes between V2.6.1 and V3.0.0\r
-\r
-       + An overflow check has been added to ensure the next free byte variable \r
-         does not wrap around.\r
-*/\r
-\r
 \r
 /*\r
  * The simplest possible implementation of pvPortMalloc().  Note that this\r
@@ -100,7 +87,11 @@ Changes between V2.6.1 and V3.0.0
 alignment without using any non-portable code. */\r
 static union xRTOS_HEAP\r
 {\r
-       volatile unsigned portLONG ulDummy;\r
+       #if portBYTE_ALIGNMENT == 8\r
+               volatile portDOUBLE dDummy;\r
+       #else\r
+               volatile unsigned portLONG ulDummy;\r
+       #endif  \r
        unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];\r
 } xHeap;\r
 \r
index 1dfd66529933071d048ea65491bfdd57c209fcec..4cd92b064b6f2a98846f55e30d57a4b82a21d7e1 100644 (file)
 alignment without using any non-portable code. */\r
 static union xRTOS_HEAP\r
 {\r
-       volatile unsigned portLONG ulDummy;\r
+       #if portBYTE_ALIGNMENT == 8\r
+               volatile portDOUBLE dDummy;\r
+       #else\r
+               volatile unsigned portLONG ulDummy;\r
+       #endif  \r
        unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];\r
 } xHeap;\r
 \r
@@ -101,7 +105,7 @@ typedef struct A_BLOCK_LINK
 } xBlockLink;\r
 \r
 \r
-static const unsigned portSHORT  heapSTRUCT_SIZE       = ( sizeof( xBlockLink ) + ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );\r
+static const unsigned portSHORT  heapSTRUCT_SIZE       = ( sizeof( xBlockLink ) + portBYTE_ALIGNMENT - ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );\r
 #define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( heapSTRUCT_SIZE * 2 ) )\r
 \r
 /* Create a couple of list links to mark the start and end of the list. */\r
index ec6d36057799abdfb993b27370ed2e9c20cced25..37beb15cfc59eaeb457cd67c3da5ea2ee9ea58af 100644 (file)
@@ -391,7 +391,7 @@ tskTCB * pxNewTCB;
                required by the port. */\r
                #if portSTACK_GROWTH < 0\r
                {\r
-                       pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 );\r
+                       pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 ) - ( ( usStackDepth - 1 ) % portBYTE_ALIGNMENT );                        \r
                }\r
                #else\r
                {\r