Fix heap setup problem

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1793 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2009-05-19 15:17:28 +00:00
parent fea6eb4be1
commit bf19cece2d
5 changed files with 52 additions and 40 deletions
+1 -1
View File
@@ -130,7 +130,7 @@ int lm3s_hardfault(int irq, FAR void *context)
if (insn == INSN_SVC0) if (insn == INSN_SVC0)
{ {
llvdbg("Forward SVCall\n"); sllvdbg("Forward SVCall\n");
return lm3s_svcall(LM3S_IRQ_SVCALL, context); return lm3s_svcall(LM3S_IRQ_SVCALL, context);
} }
} }
+1 -1
View File
@@ -73,7 +73,7 @@ CONFIG_ARCH_BOARD=eagle100
CONFIG_ARCH_BOARD_EAGLE100=y CONFIG_ARCH_BOARD_EAGLE100=y
CONFIG_BOARD_LOOPSPERMSEC=4531 CONFIG_BOARD_LOOPSPERMSEC=4531
CONFIG_DRAM_SIZE=0x00010000 CONFIG_DRAM_SIZE=0x00010000
CONFIG_DRAM_START=0x00000000 CONFIG_DRAM_START=0x20000000
CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE) CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y
CONFIG_DRAM_NUTTXENTRY=0x00002000 CONFIG_DRAM_NUTTXENTRY=0x00002000
+13 -5
View File
@@ -64,6 +64,8 @@
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/
static boolean g_nest;
/**************************************************************************** /****************************************************************************
* Name: up_ledinit * Name: up_ledinit
****************************************************************************/ ****************************************************************************/
@@ -78,6 +80,7 @@ void up_ledinit(void)
/* Configure Port E, Bit 1 as an output, initial value=OFF */ /* Configure Port E, Bit 1 as an output, initial value=OFF */
lm3s_configgpio(GPIO_FUNC_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORTE | 1); lm3s_configgpio(GPIO_FUNC_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORTE | 1);
g_nest = 0;
} }
/**************************************************************************** /****************************************************************************
@@ -92,12 +95,14 @@ void up_ledon(int led)
case LED_HEAPALLOCATE: case LED_HEAPALLOCATE:
default: default:
break; break;
case LED_IRQSENABLED:
case LED_STACKCREATED:
case LED_INIRQ: case LED_INIRQ:
case LED_SIGNAL: case LED_SIGNAL:
case LED_ASSERTION: case LED_ASSERTION:
case LED_PANIC: case LED_PANIC:
g_nest++;
case LED_IRQSENABLED:
case LED_STACKCREATED:
modifyreg32(LM3S_GPIOE_DATA, 0, (1 << 1)); modifyreg32(LM3S_GPIOE_DATA, 0, (1 << 1));
break; break;
} }
@@ -113,16 +118,19 @@ void up_ledoff(int led)
{ {
case LED_IRQSENABLED: case LED_IRQSENABLED:
case LED_STACKCREATED: case LED_STACKCREATED:
case LED_STARTED:
case LED_HEAPALLOCATE:
default: default:
break; break;
case LED_STARTED:
case LED_HEAPALLOCATE:
case LED_INIRQ: case LED_INIRQ:
case LED_SIGNAL: case LED_SIGNAL:
case LED_ASSERTION: case LED_ASSERTION:
case LED_PANIC: case LED_PANIC:
modifyreg32(LM3S_GPIOE_DATA, (1 << 1), 0); if (--g_nest <= 0)
{
modifyreg32(LM3S_GPIOE_DATA, (1 << 1), 0);
}
break; break;
} }
} }
+18 -16
View File
@@ -1,7 +1,7 @@
/************************************************************ /****************************************************************************
* mm_initialize.c * mm_initialize.c
* *
* Copyright (C) 2007 Gregory Nutt. All rights reserved. * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -14,7 +14,7 @@
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the * the documentation and/or other materials provided with the
* distribution. * distribution.
* 3. Neither the name Gregory Nutt nor the names of its contributors may be * 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software * used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
@@ -31,22 +31,22 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Included Files * Included Files
************************************************************/ ****************************************************************************/
#include "mm_environment.h" #include "mm_environment.h"
#include "mm_internal.h" #include "mm_internal.h"
/************************************************************ /****************************************************************************
* Definitions * Definitions
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Public Variables * Public Variables
************************************************************/ ****************************************************************************/
/* This is the size of the heap provided to mm */ /* This is the size of the heap provided to mm */
@@ -68,11 +68,11 @@ int g_nregions;
FAR struct mm_freenode_s g_nodelist[MM_NNODES]; FAR struct mm_freenode_s g_nodelist[MM_NNODES];
/************************************************************ /****************************************************************************
* Public Functions * Public Functions
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Function: mm_initialize * Function: mm_initialize
* *
* Description: * Description:
@@ -88,12 +88,14 @@ FAR struct mm_freenode_s g_nodelist[MM_NNODES];
* *
* Assumptions: * Assumptions:
* *
************************************************************/ ****************************************************************************/
void mm_initialize(FAR void *heapstart, size_t heapsize) void mm_initialize(FAR void *heapstart, size_t heapsize)
{ {
int i; int i;
mlldbg("Heap: start=%p size=%u\n", heapstart, heapsize);
/* The following two lines have cause problems for some ZiLog compilers /* The following two lines have cause problems for some ZiLog compilers
* in the past. Life is easier if we just the suppress them for those * in the past. Life is easier if we just the suppress them for those
* tools. * tools.
@@ -132,7 +134,7 @@ void mm_initialize(FAR void *heapstart, size_t heapsize)
mm_addregion(heapstart, heapsize); mm_addregion(heapstart, heapsize);
} }
/************************************************************ /****************************************************************************
* Function: mm_addregion * Function: mm_addregion
* *
* Description: * Description:
@@ -148,7 +150,7 @@ void mm_initialize(FAR void *heapstart, size_t heapsize)
* *
* Assumptions: * Assumptions:
* *
************************************************************/ ****************************************************************************/
void mm_addregion(FAR void *heapstart, size_t heapsize) void mm_addregion(FAR void *heapstart, size_t heapsize)
{ {
+19 -17
View File
@@ -1,7 +1,7 @@
/************************************************************ /****************************************************************************
* mm_mallinfo.c * mm/mm_mallinfo.c
* *
* Copyright (C) 2007 Gregory Nutt. All rights reserved. * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -14,7 +14,7 @@
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the * the documentation and/or other materials provided with the
* distribution. * distribution.
* 3. Neither the name Gregory Nutt nor the names of its contributors may be * 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software * used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
@@ -31,39 +31,39 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Included Files * Included Files
************************************************************/ ****************************************************************************/
#include <assert.h> #include <assert.h>
#include "mm_environment.h" #include "mm_environment.h"
#include "mm_internal.h" #include "mm_internal.h"
/************************************************************ /****************************************************************************
* Definitions * Definitions
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Private Data * Private Data
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Private Functions * Private Functions
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* Public Functions * Public Functions
************************************************************/ ****************************************************************************/
/************************************************************ /****************************************************************************
* mallinfo * mallinfo
* *
* Description: * Description:
* mallinfo returns a copy of updated current mallinfo. * mallinfo returns a copy of updated current mallinfo.
* *
************************************************************/ ****************************************************************************/
#ifdef CONFIG_CAN_PASS_STRUCTS #ifdef CONFIG_CAN_PASS_STRUCTS
struct mallinfo mallinfo(void) struct mallinfo mallinfo(void)
@@ -103,6 +103,7 @@ int mallinfo(struct mallinfo *info)
node < g_heapend[region]; node < g_heapend[region];
node = (struct mm_allocnode_s *)((char*)node + node->size)) node = (struct mm_allocnode_s *)((char*)node + node->size))
{ {
mvdbg("region=%d node=%p preceding=%p\n", region, node, node->preceding);
if (node->preceding & MM_ALLOC_BIT) if (node->preceding & MM_ALLOC_BIT)
{ {
uordblks += node->size; uordblks += node->size;
@@ -118,6 +119,7 @@ int mallinfo(struct mallinfo *info)
} }
} }
mvdbg("region=%d node=%p g_heapend=%p\n", region, node, g_heapend[region]);
DEBUGASSERT(node == g_heapend[region]); DEBUGASSERT(node == g_heapend[region]);
uordblks += SIZEOF_MM_ALLOCNODE; /* account for the tail node */ uordblks += SIZEOF_MM_ALLOCNODE; /* account for the tail node */
} }