电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » ARM连接器问题,高手请进


共27条 1/3 1 2 3 跳转至

ARM连接器问题,高手请进

菜鸟
2006-03-30 04:20:00    评分

-ro-base 0x350000

-rw-base 0x20f0000

-first start.o(AppInit)

链接时采用上面的链接参数能连接通过并运行正常,为了在链接时检查代码和全局变量有没有超出范围,采用以下scatter文件方式链接

LD_ROM 0x350000 0x2a0000
{
RO 0x350000
{
start.o (AppInit, +First)
*(+RO)
}
RW 0x20f0000
{
*(+RW)
}
ZI +0
{
*(+ZI)
}
}

链接能正常通过,也能检测代码是否超出大小,但链接后的程序运行一直无法跑起来,不知道问题出在哪。

另外还问一个问题,我把程序分成了RO、RW和ZI三个输出段,采用scatter文件的方式怎样才能在保持现有三个段的基础上,像代码一样在链接时能检测RW和ZI段总和是否超出大小?




关键词: 连接器     问题     高手     请进    

菜鸟
2006-03-30 17:12:00    评分
2楼
版主,能不能帮我看看,谢谢啦:)

菜鸟
2006-03-30 17:46:00    评分
3楼

设置链接器输出符号表-list。

比较一下两种情况下符号表内容是否相同,尤其是Image$$RO$$Limit和Image$$RW$$Base这两个。

然后看看你的初始化程序是否及怎样使用Image$$RO$$Limit这样的符号的。

也许有帮助。


菜鸟
2006-03-30 18:08:00    评分
4楼
比较了以下,Image$$RO$$Limit和Image$$RW$$Base是完全一样的,包括输出表中的Memory Map of the image中的内容都是一样的,所以一直没弄明白改过来后为什么会跑不起来

菜鸟
2006-03-30 18:25:00    评分
5楼

是用AXD跑还是烧到FLASH跑?0x350000是FLASH还是SDRAM?如果是AXD跑,能跑到main函数吗?


菜鸟
2006-03-30 19:38:00    评分
6楼
是烧到FLASH中跑,0x350000是FLASH地址

菜鸟
2006-03-30 20:00:00    评分
7楼
比较了两个输出表,Image$$ZI$$Limit不一样,其他的都一样,采用scatter方式的Image$$ZI$$Limit值和Image$$ZI$$Base居然是一样的,这是怎么回事?

菜鸟
2006-03-30 20:36:00    评分
8楼

有可能的。ZI是未初始化的全局变量。如果你在代码定义全局变量时都初始化了,那么这两个就相同。

那么在第一个输出表中,Image$$ZI$$Base和Image$$ZI$$Limit之间,应该就是这些变量的描述。那么在第二个输出表中,有没有这些变量,位于哪个段中?


菜鸟
2006-03-30 20:41:00    评分
9楼

要不你把输出表的内容贴出来。或者把两个输出表中所有Image$$开头的符号的值贴出来。


菜鸟
2006-03-30 20:41:00    评分
10楼

这应该是不正常现象,因为代码是完全一样的,在第二个输出表中这些需要初始化的变量放在Image$$ZI$$Limit之后,所以在程序进行数据搬移时这些应该要初始化的变量没有搬移过去,造成程序在使用变量时无法访问。

基于以上分析,问题的焦点是同样的代码,用scatter之后为什么会出现Image$$ZI$$Base和Image$$ZI$$Limit值一样的情况,是不是scatter文件的编写有问题


共27条 1/3 1 2 3 跳转至

回复

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