ARC学习(6)arc 编译器overlap 地址重叠方式使用
armclang/armcc overlay使用方法详见ARM学习(31)编译器对overlay方式的支持。
1、arc overlap 地址重叠方式使用
正常情况下面,链接脚本里面编写了两段section,如果两段section 地址一致,那么会出现如下链接错误
MEMORY
{
ROM : ORIGIN = 0x00000000,LENGTH=64K
OVERLAY : ORIGIN = 0x10000000,LENGTH=64K
RAM : ORIGIN = 0x20000000,LENGTH=64K
BANK0 : ORIGIN = 0x3000000,LENGTH=64K
BANK1 : ORIGIN = 0x30010000,LENGTH= 64K
BANK2 : ORIGIN = 0x30020000,LENGTH=64K
}
SECTIONS
{
GROUP ADDR(0x10000000)SIZE(64K):
{
.overlay_func0 ALIGN(4)BLOCK(4):{
KEEP("(*.o)")}
}>OVERLAY AT>BANKO
GROUP ADDR(0x10000000)SIZE(64K):
{
.overlay_fun1 ALIGN(4) BLOCK(4): {
KEEP("(*.o)")}
}>OVERLAY AT>BANK1
GROUP ADDR(0x10000000)SIZE(64K):
{
.overlay_fun2 ALIGN(4) BLOCK(4): {
KEEP("(*.o)")}
}>OVERLAY AT>BANK2
}

如果要进行内存复用,那么必须要把两段code放到同一个section,如果链接器不支持,那么就必定会出现上述的错误,所以在搜索arc的相关手册后,找到-zallow_memory_overlap,测试发现增加该链接选项后,地址即使重叠也不会报上述的重叠错误。
arc手册说明如下:

2、arc overlay示例
int test_count_g = 0;
__attribute__ ((section

最低0.47元/天 解锁文章
1306

被折叠的 条评论
为什么被折叠?



