这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » bootStart.c的问题

共6条 1/1 1 跳转至

bootStart.c的问题

菜鸟
2007-05-24 00:50:16     打赏

在bootStart.c中有下面的代码:

IMPORT UCHAR binArrayStart [];

IMPORT UCHAR binArrayEnd [];

IMPORT char etext []; /* defined by the loader */
IMPORT char end []; /* defined by the loader */
IMPORT UCHAR wrs_kernel_data_start []; /* defined by the loader */
IMPORT UCHAR wrs_kernel_data_end []; /* defined by the loader */

这里的loader指什么呢?

新手上路 ,谢谢指教!




关键词: bootStart.c     问题    

菜鸟
2007-05-24 03:25:00     打赏
2楼

链接器,在链接脚本里面定义,,在ldscripts里面。target/h/gnu( or diab)/tool里面。


菜鸟
2007-05-24 05:55:00     打赏
3楼

谢谢版主!

那么我到底应该看哪个文件夹下的连接文件呢?\target\h\tool\gnu\ldscripts还是\target\h\tool\diab\ldscripts?

怎么看懂这些文件呢?应该学习哪些知识?谢谢!


菜鸟
2007-05-24 17:04:00     打赏
4楼

具体哪一个看你是用的什么工具链,

可从编译输出信息里面了解到编译到底调用了哪些东西。引用了哪些文件。

ldscripts的含义可以看gnu的手册。


菜鸟
2007-05-24 17:14:00     打赏
5楼

((FUNCPTR)ROM_OFFSET(copyLongs))

( (UINT *)((UINT)ROM_TEXT_ADRS + ((UINT)BINARRAYEND_ROUNDOFF — (UINT)romInit)),

(UINT *)BINARRAYEND_ROUNDOFF, ((UINT)wrs_kernel_data_end—(UINT)binArrayEnd) / sizeof (long) );

还有我不太明白为什么要执行上面的拷贝?wrs_kernel_data_end和binArrayEnd之间还有有用的东西吗?

binArrayStartbinArrayEnd因该是rom的地址吧,那么为什么在拷贝的时候用((UINT)binArrayStart - (UINT)romInit)计算拷贝的long数目?romInit不是ram的地址吗?

谢谢!!!


菜鸟
2007-05-24 21:02:00     打赏
6楼

啊,一言难尽啊。每一种映象都有所不同。

bAStart和bAEnd是压缩映象才有的。拷贝的目的是为了在RAM中运行,速度更快。压缩映象还有个解压过程。

推荐看一本书:VxWorks BSP Training WorkShop。网上有电子版。


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]