打印

_main到main()之间,系统都干了些什么

[复制链接]
1960|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
云痕|  楼主 | 2008-7-25 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动代码中有个 |.text|的AREA,内含标号__user_initial_stackheap,没看见这个域内代码在哪执行的,感觉是在_main到main()期间完成的,看了下汇编,实在看不清楚干了些什么事情,猜是初始化了堆和栈,分配了全局变量的空间,以及初始了程序中带初始化值的全局变量,可之外还干了些什么,一直没搜到详细的说明。
手头做个基于LPC2364带远程无线IAP更新的玩意,参照ZLG的模板,他的做法是进入main()后,将新旧2个版本作为2个被调用的子函数来切换。这在他的演示模板里是没问题的,可到了我自己的应用中,感觉就有点麻烦了。
1,_main到main()间是否对全局变量分配了空间并对带初始化的全局变量进行了初始化。如果某个变量在老版本中有,而新的版本中无,则是否表示运行新版本时,这个仅在老版本中存在的全局变量是否一直占用了栈区空间且无法被释放?
2,进入main()后,栈区已经有数据存在,切换到新版本后,可能我需要的栈区和堆区的起始地址和限制地址都有了变化,是否能在main()函数体内修改c环境的堆和栈设置?此时栈顶地址已经有有效数据存在,但如果保证此时未在堆区分配空间,是否可更改堆区的设置?
3,_main到main()间,除了分配堆和栈区,为全局变量分配空间和初始化外,所谓的初始化c环境,究竟都还干了些什么事情?心里没点底
我现在的想法是,启动文件存放16字的异常入口和2次跳转入口,然后根据位于flash内的某个绝对地址的变量值来选择跳转到哪个绝对地址,此绝对地址存放另一个汇编文件输出段,对各模式的栈初始,以及到main()之前的处理。有人这么用过么?感觉这样空间浪费严重,_main里有些东西可能不需要存储2份

相关下载

相关帖子

沙发
Again_gyf| | 2008-7-25 16:48 | 只看该作者

自己跟踪下就清楚了呀!

IAR里面从_main到main()初始化了.bss段的内容

使用特权

评论回复
板凳
computer00| | 2008-7-25 17:03 | 只看该作者

一般都会在这里面初始化全局变量,自己单步跟踪看代码就

使用特权

评论回复
地板
sxggj| | 2008-7-28 09:38 | 只看该作者

光看了一下你的题目,因为我也不是太清楚的,给你个图

这是ARM培训的一张图

使用特权

评论回复
5
dld2| | 2008-7-28 09:53 | 只看该作者

顶楼上

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

75

帖子

0

粉丝