mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-23 06:51:58 -04:00
Add proper 8 byte alignment support.
This commit is contained in:
parent
0b86cb1e2c
commit
0a9fddb5d4
|
@ -220,6 +220,10 @@
|
||||||
#include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"
|
#include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GCC_PPC440
|
||||||
|
#include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _16FX_SOFTUNE
|
#ifdef _16FX_SOFTUNE
|
||||||
#include "..\..\Source\portable\Softune\MB96340\portmacro.h"
|
#include "..\..\Source\portable\Softune\MB96340\portmacro.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -49,19 +49,6 @@
|
||||||
licensing and training services.
|
licensing and training services.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Changes between V2.5.1 and V2.5.1
|
|
||||||
|
|
||||||
+ The memory pool has been defined within a struct to ensure correct memory
|
|
||||||
alignment on 32bit systems.
|
|
||||||
|
|
||||||
Changes between V2.6.1 and V3.0.0
|
|
||||||
|
|
||||||
+ An overflow check has been added to ensure the next free byte variable
|
|
||||||
does not wrap around.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The simplest possible implementation of pvPortMalloc(). Note that this
|
* The simplest possible implementation of pvPortMalloc(). Note that this
|
||||||
|
@ -100,7 +87,11 @@ Changes between V2.6.1 and V3.0.0
|
||||||
alignment without using any non-portable code. */
|
alignment without using any non-portable code. */
|
||||||
static union xRTOS_HEAP
|
static union xRTOS_HEAP
|
||||||
{
|
{
|
||||||
|
#if portBYTE_ALIGNMENT == 8
|
||||||
|
volatile portDOUBLE dDummy;
|
||||||
|
#else
|
||||||
volatile unsigned portLONG ulDummy;
|
volatile unsigned portLONG ulDummy;
|
||||||
|
#endif
|
||||||
unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];
|
unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];
|
||||||
} xHeap;
|
} xHeap;
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,11 @@
|
||||||
alignment without using any non-portable code. */
|
alignment without using any non-portable code. */
|
||||||
static union xRTOS_HEAP
|
static union xRTOS_HEAP
|
||||||
{
|
{
|
||||||
|
#if portBYTE_ALIGNMENT == 8
|
||||||
|
volatile portDOUBLE dDummy;
|
||||||
|
#else
|
||||||
volatile unsigned portLONG ulDummy;
|
volatile unsigned portLONG ulDummy;
|
||||||
|
#endif
|
||||||
unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];
|
unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];
|
||||||
} xHeap;
|
} xHeap;
|
||||||
|
|
||||||
|
@ -101,7 +105,7 @@ typedef struct A_BLOCK_LINK
|
||||||
} xBlockLink;
|
} xBlockLink;
|
||||||
|
|
||||||
|
|
||||||
static const unsigned portSHORT heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );
|
static const unsigned portSHORT heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + portBYTE_ALIGNMENT - ( sizeof( xBlockLink ) % portBYTE_ALIGNMENT ) );
|
||||||
#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( heapSTRUCT_SIZE * 2 ) )
|
#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( heapSTRUCT_SIZE * 2 ) )
|
||||||
|
|
||||||
/* Create a couple of list links to mark the start and end of the list. */
|
/* Create a couple of list links to mark the start and end of the list. */
|
||||||
|
|
|
@ -391,7 +391,7 @@ tskTCB * pxNewTCB;
|
||||||
required by the port. */
|
required by the port. */
|
||||||
#if portSTACK_GROWTH < 0
|
#if portSTACK_GROWTH < 0
|
||||||
{
|
{
|
||||||
pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 );
|
pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 ) - ( ( usStackDepth - 1 ) % portBYTE_ALIGNMENT );
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue