5354|6

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ROM_OFFSET的疑惑 [复制链接]

在romStart函数中,调用copyLongs将代码从rom拷贝到ram,代码中是先用ROM_OFFSET(copyLongs)计算出copyLongs在ROM中的地址,然后再调的。但是执行ram清零操作作,为啥调用fillLongs 前没有计算它在ROM中的地址呢?

最新回复

我的cpu是mpc85xx,是E500核,上电复位向量为0xfffffffc,而非603e核的0x100,因此上电后mpc85xx会先跳转到resetEntry,然后再执行romInit;603e核的cpu,则是上电执行romInit(romInit的链接地址为0xXXXX0100)  详情 回复 发表于 2010-1-23 01:25
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这里会VxWorks的高手好像不是很多。

顶起 !
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
唉,真郁闷~

那哪个bbs讨论VxWorks的氛围比较好呀
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

4
 
这个宏还可以这么理解:ROM_OFFSET说明是在ROM中,没添加的是不是不应该在ROM中呢?

事实上copyLongs的时候,系统还在ROM中运行,因此添加ROM_OFFSET计算在ROM中的偏移量,等到copyLongs执行完,ROM中的非压缩部分已经copy到RAM中了,调用的fillLongs是RAM中的,如果你想调用ROM中的fillLongs也是可以的,加上ROM_OFFSET就好了,不过那样系统慢多了。。。。嘿嘿
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上的解释放在romStart()中是可解释通的,但是在romInit.s,上电复位时,在执行romInit之前,会先执行resetEntry,在resetEntry主要是初始化中断向量、TLB、LAW、Local Bus的BRx/ARx以及DDR内存控制器,而初始化DDR内存控制器是在汇编中调用了c函数——sysDramInit()。但是sysDramInit()被链接在RAM地址空间中,此时调用并没有重新计算sysDramInit在ROM中的地址,这该怎么理解?

在后面的执行过程中,从romInit跳转到romStart重新计算了romStart在ROM中的地址,按道理说,前面那次调用也应该做一下ROM_OFFSET呀?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
在执行romInit之前,会先执行resetEntry

你确定你的系统ROM中执行的第一个函数不是romInit?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
我的cpu是mpc85xx,是E500核,上电复位向量为0xfffffffc,而非603e核的0x100,因此上电后mpc85xx会先跳转到resetEntry,然后再执行romInit;603e核的cpu,则是上电执行romInit(romInit的链接地址为0xXXXX0100)
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表