MDK链接脚本错误

我想让我的程序运行在RAM中而不是在SPI FLASH上,写了一个scatterfile:

ROM 0x00000000 0x00200000 ;spi flash
{
STARTUP +0
{
startup.o(RESET, +First)
;*(+RO)
}
RO 0x20000000 0x00020000 ;运行地址RAM中
{
*(+RO)
*(+RW)
*(+ZI)
}
}

链接时出现错误:

 

Error: L6202E: entry.o(.ARM.Collect$$$$00000000) cannot be assigned to non-root region 'ER_RO'

错误可以通过改成下面消除:

ROM 0x00000000 0x00200000 ;加载地址flash
{
STARTUP +0
{
startup.o(RESET, +First)
;*(+RO)
}
}

RAM 0x20000000 0x00020000;加载地址RAM

{

RO 0x20000000 0x00020000 ;运行地址RAM中
{
*(+RO)
*(+RW)
*(+ZI)
}

}

可以链接通过,但是由于加载地址两个,链接完成之后会生成***.bin的目录,目录里面有名为ROM和RAM连个文件.

最后没有找到具体原因,entry.o不知道是具体怎么生成的,也不知道有什么作用,只能改成:

ROM 0x00000000 0x00200000 ;spi flash
{
STARTUP +0
{
startup.o(RESET, +First)
*(+RO)
}
RO 0x20000000 0x00020000 ;运行地址RAM中
{

xxx.o;我想要运行在RAM中的code

.

.

.

xxx2.o
;*(+RO)
*(+RW)
*(+ZI)
}
}

链接通过,可以生成xxx.bin,也可执行.

 

posted @ 2014-12-25 15:35  风而已  阅读(1120)  评论(0编辑  收藏  举报