移植vivi到FS2410(s3c2410)上碰到的问题,串口有这样的打印:
Failed initailizing heap region
问题出在于,下面的代码中,
gHeapBase
始终不为NULL,这就很奇怪了,作为C开发者,一般都会知道
gHeapBase
会被汇编在
bss段,然后加载的时候,bss区域都是0。这个问题真是让我百思不得其解了好几天。但是,注意,这一概念是在有OS的情况下而言,因为加载程序到内存,并把bss段清零的动作应该是由程序加载器来做的,然后在裸机环境下,没有人替我们做这个事情,所以就该自己做。似乎看到uboot代码中有做这样一步动作,以后移植uboot时在总结
static blockhead *
gHeapBase = NULL;
static inline int mmalloc_init(unsigned char *heap, unsigned long size)
{
if (gHeapBase != NULL)
return -1;
DPRINTK("malloc_init(): initialize heap area at 0x%08lx, size = 0x%08lx\n",
heap, size);
gHeapBase = (blockhead *)(heap);