3035|4

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

编译器的工作问题 [复制链接]

问个基本问题:以S3C44B0X为例,在ADS编译环境下,编译器编译程序后自动将程序的代码和数据分开。代码和数据都放在FLASH里,。在启动程序44BINIT.S里,将数据段从FLASH拷贝SDRAM里,代码仍然留在FLASH里。

请问是这样的不?

最新回复

其实,不管是KEIL还是ARM上的开发平台,甚至通用的PC上,都有一个系统初始加载的过程 就是KEIL里也有的,虽然在KEIL里,你的入口是MAIN,但是,如果你跟踪进去你就会发现在,其实是编译器把你的全局变量什么的都进行按你的要求初始化(如:你定义 int a  = 1;//系统会在上电后先把a的变量给一个值),硬件初始化后.对把控制权关给main()这时候才真正的运行你的程序. 所以...  详情 回复 发表于 2007-9-15 14:08
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是的 。
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
大侠,能多赏几个字么?  这么简洁

还有问题:在AXD里面,你仔细看过反汇编代码没?

执行的第1句  B Resethandler   这句 放在  0X0C00 33BC  
Main() 放在  0X 0C00 0A10    DELAY() 放在 0X0C00 0000

程序应该是从0X0000 0000开始执行 ,但我不知道它是怎么一下子就跳到 B Resethandler  这句的 ? 在跳转到这句前 还要做哪些事 ?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
我的一点想法: 对于普通单片机C编程, 我们根本不需要考虑 象上面这样很繁琐的东西。 因为普通单片机 没有 象44binit.s 这样的东西。编译器为我们做好了一切。譬如,KEIL下的C51编程:编译器编译程序后自动将程序的代码和数据分开。烧写时, 代码放在FLASH里,数据放RAM里。PC指向0X0000,程序开始一步一步往下执行。 一切OK了。

ARM就很不一样了。他的存储器太多了——有FLASH(2种),CACHE ,还有SDRAM。 我不晓得上面说的FLASH往SDRAM里拷贝数据的原因是什么?  很困惑。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
其实,不管是KEIL还是ARM上的开发平台,甚至通用的PC上,都有一个系统初始加载的过程

就是KEIL里也有的,虽然在KEIL里,你的入口是MAIN,但是,如果你跟踪进去你就会发现在,其实是编译器把你的全局变量什么的都进行按你的要求初始化(如:你定义 int a  = 1;//系统会在上电后先把a的变量给一个值),硬件初始化后.对把控制权关给main()这时候才真正的运行你的程序.

所以...
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表