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

共27条 2/3 1 2 3 跳转至
菜鸟
2006-03-30 21:09:00     打赏
11楼

老大,这几个符号的值到底是多少啊?

我有一种怀疑,就是输出段的名称不能用RO/RW/ZI来命名,这些有可能被认为是关键字。但是这样的话,你要修改初始化程序中使用到这些符号的地方。

例如如果RW的名称是ER_RW,那么对应的符号是Image$$ER_RW$$Base和Image$$ER_RW$$Limit。要在初始化程序中做相应的替换。如果程序中没有使用到这些符号,他们不会出现在符号表中。


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

可运行的程序的输出表

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     打赏
13楼
你的怀疑我也正在怀疑,我改一下初始化程序中对符号的引用试试

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

菜鸟
2006-03-30 22:30:00     打赏
15楼
+FIRST是不是应该大写。

菜鸟
2006-03-30 22:33:00     打赏
16楼

并且,好象没有逗号:

44BINIT.O (INIT +FIRST)


菜鸟
2006-03-30 22:37:00     打赏
17楼

我的一个成功的scatter文件。在SDRAM执行,其中一段代码放在片内SRAM执行。

LOAD_SDRAM 0x0c008000
{
SDRAM1 0x0c008000 0x100000
{
44BINIT.O (INIT +FIRST)
* (+RO)
}

SDRAM2 0x0c500000 0x80000
{
* (+RW,+ZI)
}

SRAM 0x10001000 0x1000
{
COMMONCALC.O (+RO)
}

}


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

刚才试了一下,还是一样

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


菜鸟
2006-03-30 22:43:00     打赏
19楼

你这样把RW和ZI放在一起,ZI段就无法进行清零操作对吗?

另外我想问一下ZI段的变量是非要清零吗?清零有什么意义?


菜鸟
2006-03-30 22:54:00     打赏
20楼

可以的。44binit.s里,先将区域(从Image$$SDRAM1$$Limit地址开始,到Image$$SDRAM2$$ZI$$Base为止)拷贝到Image$$SDRAM2$$Base开始的位置;然后把区域(从Image$$SDRAM2$$ZI$$Base开始,到Image$$SDRAM2$$ZI$$Limit为止)清零。

清零其实没有意义。我们编程序时不会认为未初始化的变量就是0的。


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

回复

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