分类: LINUX
2009-12-31 11:26:02
今天在调一个开cache和MMU的ADS程序时候,可在编译链接的时候老是发现链接出问题,报的错误是:
L6202E:Section Region$$Table cannot be assigned to a non-root region
看来是我的链接脚本scat_crremap.scf出问题了:
我的scatter文件内容如下:
ESRAM 0x04000000 ;第一个加载域是位于ESRAM中
{
ESRAM 0x04000000 ;加载域中的运行域
{
boot_gfd_4k2.o (BOOT, +First)
}
}
SDram2 0x30100000 ;第二个加载域是位于SDRAM中
{
SDram1 0x30000000 ;第一个运行域是准备映射中断向量表
{
int_gfd.o (INT, +First)
}
SDram2 0x30100000 ;第二个运行域准备映射其他代码和数据
{
* (+RO,+RW,+ZI)
}
}
看来这个文件第二个加载域出问题了:
上网无解,后来自己结合前人正确的scatter文件,我发现原来是在SDRAM的加载域中数据区有问题,数据区必须要放在和加载域在同一个部分的运行域才行,这样才没有错,后来我仔细想了一下,觉得可能是由于ADS的堆栈区必须要和加载域一致,否则ADS还得自己生成搬运自己数据区的代码,这应该是不合理的,于是我就改了下scatter文件干脆就弄了三个加载域,每个加载域中都含有一个唯一的运行域这样就没有问题了。
ESRAM 0x04000000
{
ESRAM 0x04000000
{
boot_gfd_4k2.o (BOOT, +First)
}
}
SDram1 0x30000000
{
SDram1 0x30000000
{
int_gfd.o (INT, +First)
}
}
SDram2 0x30100000
{
SDram2 0x30100000
{
* (+RO,+RW,+ZI)
}
}