嵌入式中__main 和main 作用

在C加main函数就是使程序从__main中开始运行,再调用main函数

__main 作用  :1。copy RW (linux 的data段)
  2. zero ZI ( bss段)
  3. init LIB(初始化库)
__main就干了两件事初始化C/C++所需的资源,调用main函数。

__main可以看成使程序符合C的环境;如C中初始化的全局变量放到data段;而
未初始化的全局变量放到bss段并且默认为0;
这时就可以用__main的作用来解释,初始化的全局变量值被从代码存储位置拷到rw(data)执行位置;
而bss段被清零,所有的值被赋成0;

ADS 中设置了ro-base 和rw-base 及image entry-point对程序的影响
在ADS 的debugRel setting ->ARM linker中设置这三个
三个的作用
ro-base 指代码段在内存中的执行地址
rw-base 指数据段在内存中的执行地址
entry-point 调试时程序入口   所以entry-point只影响axf文件不影响bin文件
下到板子上就没区别了;

下边代码在AXD中调试时
int j = 100;
int main(void)
{
 if(j == 100)
  printf("j == 100 ok");

 return 0;
}
当ro 为0
rw   =  10000
entry-point = main时
执行不到printf函数

在存储时ro一般在0地址(和硬件有关),rw在ro后边,当rw设置了之后,__main会
将rw的全局变量值搬移到设置的位置。而entry-point为main跳过__main则rw设置的
位置上没全局变量的值,执行时j自然就不是100了
若rw不设 而entry-point是main的话,rw的执行地址就默认为其存储地址(即在ro后边)
这时执行时j为100,但可能print用到的库没被初始化(__main的作用之一),也用不了;
参考:http://blog.csdn.net/norains/archive/2010/12/03/6052029.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值