老大,这几个符号的值到底是多少啊?
我有一种怀疑,就是输出段的名称不能用RO/RW/ZI来命名,这些有可能被认为是关键字。但是这样的话,你要修改初始化程序中使用到这些符号的地方。
例如如果RW的名称是ER_RW,那么对应的符号是Image$$ER_RW$$Base和Image$$ER_RW$$Limit。要在初始化程序中做相应的替换。如果程序中没有使用到这些符号,他们不会出现在符号表中。
可运行的程序的输出表
Image$$RO$$Limit 0x0058b2e4
Image$$RW$$Base 0x020f0000
Image$$ZI$$Base 0x020f23bc
Image$$ZI$$Limit 0x020f8078
无法运行的程序的输出表
Image$$ZI$$Limit 0x020f23bc
并且,好象没有逗号:
44BINIT.O (INIT +FIRST)
我的一个成功的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) }
}
刚才试了一下,还是一样
好像看过说大小写都可以的,至于逗号倒没研究过,不过刚才试的结果来看是都可以。
你这样把RW和ZI放在一起,ZI段就无法进行清零操作对吗?
另外我想问一下ZI段的变量是非要清零吗?清零有什么意义?
可以的。44binit.s里,先将区域(从Image$$SDRAM1$$Limit地址开始,到Image$$SDRAM2$$ZI$$Base为止)拷贝到Image$$SDRAM2$$Base开始的位置;然后把区域(从Image$$SDRAM2$$ZI$$Base开始,到Image$$SDRAM2$$ZI$$Limit为止)清零。
清零其实没有意义。我们编程序时不会认为未初始化的变量就是0的。