无OS下 BSS段清零

在无操作系统环境下,移植程序时遇到BSS段未清零的问题。通常,BSS段在有OS时由加载器初始化为零。但在裸机环境中,需要手动进行清理。文章介绍了如何通过链接脚本定义BSS段并使用汇编或C语言实现清零,以确保全局变量的正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移植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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值