当前位置: 代码迷 >> VxWorks >> 关于链接地址和绝对地址解决思路
  详细解决方案

关于链接地址和绝对地址解决思路

热度:406   发布时间:2016-04-28 11:28:58.0
关于链接地址和绝对地址
     在vxworks中的rominit函数,不使用绝对地址,只使用相对地址,请问,是不是所有在rom中运行的程序,都是只使用相对地址的呢?在什么时候使用相对地址,在什么时候使用绝对地址呢?
     另外,romstart函数也是在rom中运行的,为什么要把它的链接地址link到ram空间呢?
     
------解决方案--------------------
PU的寻址方式可以使用绝对地址和相对地址,相对地址的像PowerPC里的bl指令。
先说明下LZ最后一个问题,需要清楚下vxWorks的启动过程,vxWorks在启动时首先需要在rom中取数据(因为ram掉电就没程序了),在rom里执行的程序就是romInit和romStart,然后就会跳到Ram中执行了。这点LZ应该很清楚吧
再说前面两个问题,在多数程序中,都是使用相对地址进行链接跳转的,这是因为使用相对地址的执行速度会更快些,只要函数标识不冲突,就可以正常执行。而绝对地址大多数用于长地址跳转(如从ROM跳到RAM中)的情况。
这里需要说一下跳转的机制,程序会将指令和地址传递给PC(程序计数器),相对地址长度短,用机器码一条就可以搞定;而绝对地址呢,很长(16或32位),需要用两条机器码指令才能完成,效率自然就低了。
------解决方案--------------------
引用:
PU的寻址方式可以使用绝对地址和相对地址,相对地址的像PowerPC里的bl指令。
先说明下LZ最后一个问题,需要清楚下vxWorks的启动过程,vxWorks在启动时首先需要在rom中取数据(因为ram掉电就没程序了),在rom里执行的程序就是romInit和romStart,然后就会跳到Ram中执行了。这点LZ应该很清楚吧
再说前面两个问题,在多数程序中,都是使用相对地址进行链接跳转的,……

恩 绝对地址用于长地址跳转的指令中
  相关解决方案