这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ARM连接器问题,高手请进

共14条 1/2 1 2 跳转至

ARM连接器问题,高手请进

菜鸟
2006-03-30 04:19:47     打赏

-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 18:08:00     打赏
3楼
比较了以下,Image$$RO$$Limit和Image$$RW$$Base是完全一样的,包括输出表中的Memory Map of the image中的内容都是一样的,所以一直没弄明白改过来后为什么会跑不起来

菜鸟
2006-03-30 19:38:00     打赏
4楼
是烧到FLASH中跑,0x350000是FLASH地址

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

菜鸟
2006-03-30 20:41:00     打赏
6楼

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

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


菜鸟
2006-03-30 21:50:00     打赏
7楼

可运行的程序的输出表

Image$$RO$$Limit 0x0058b2e4

Image$$RW$$Base 0x020f0000

Image$$ZI$$Base 0x020f23bc

Image$$ZI$$Limit 0x020f8078

无法运行的程序的输出表

Image$$RO$$Limit 0x0058b2e4

Image$$RW$$Base 0x020f0000

Image$$ZI$$Base 0x020f23bc

Image$$ZI$$Limit 0x020f23bc


菜鸟
2006-03-30 21:52:00     打赏
8楼
你的怀疑我也正在怀疑,我改一下初始化程序中对符号的引用试试

菜鸟
2006-03-30 22:05:00     打赏
9楼
dld2,将RO/RW/ZI前面都加上ER_也不行,还是上面说的那种现象

菜鸟
2006-03-30 22:39:00     打赏
10楼

刚才试了一下,还是一样

好像看过说大小写都可以的,至于逗号倒没研究过,不过刚才试的结果来看是都可以。


共14条 1/2 1 2 跳转至

回复

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