程序的三段的解释

程序的三段的解释

一个程序主要包括下面三个段:代码段,数据段,BSS段

 

代码段:指令代码(局部变量也放在代码段)。

数据段:有初始值(并且不为0)的全局变量或静态变量。

BSS段:初始化为0或无初始值的全局或静态变量。

 

在我们编译出来的二进制文件中,是不存在BSS段的。在我们程序运行时,会自动清除BSS段。这样可能节省内存空间。

程序在访问全局变量时,用到的是链接地址。程序所用到的链接地址不一样,会导致程序访问全局量,所用的地址不一样。

在我们的ARM设置从NAND flash启动时,ARM上电启动的时候,硬件会自动将NAND flash的前8K代码拷贝到ARM片内SRAM

的0地址中执行。

这时我们要注意了:如果我们在程序编译的时候设置链接地址为0x50000000时,那程序存放全局变量的地址一定是大于0x50000000

这个地址的,而一开始我们的程序是在片内0地址处运行。程序在访问全局变量时会用链接地址来访问全局变量,这时程序执行就会出

错。为了能让程序正确运行,我们就要重定位我们的程序。

什么是重定位程序呢?

就是把片内8K的程序重新拷贝到链接地址所在的内存中去执行。

位置无关码:就是不管你的链接地址是多少,这些代码也能正常运行。

什么样的代码才是位置无关码:B、BL 且不访问全局变量或静态变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值