NuMicro Family AN0000
© 2012 Nuvoton Technology Corp.
AN0000 Rev. 1.24 —Jul 13, 2018 8 of 40
命令将地址0x1000位置的 1 个page 大小映射到地址 0x0000。1个page大小就是512B。这就意
味着Vector Page Remap命令将0x1000 – 0x1200映射到了0x0000 – 0x0200。这个动作会导致一个
副作用:原本地址0x0 – 0x200地方的代码除了向量表还有其他的代码,假设向量表占了256B,
还是有256B是其它代码,这样一映射,向量表变成了地址0x1000处的,但是原本地址0x0100处
的代码也不见了。怎样将在地址0x0 – 0x200的代码移到0x200后面呢?编译器一般都提供了强大
的武器——Link Script。我们以Keil为例说明Link Script的写法,假设:Link Script文件取名
link.ld,整个 link.ld 文件内容如下:
;说明应用程序基地址,也就是向量表RESET段的地址为0x00000000 。如果程序执行地址是0x1000,就把
0x00000000改成0x1000
ROM1 0x00000000
{
IROM1 +0 { ;
*(RESET, +First)
startup_NANO1xx.o(+RO)
*(InRoot$$Sections)
}
FLASH1 0x00000200 FIXED{ ;其它程序都放到0x200后面
.ANY (+RO)
}
RAM1 0x20000000 0x10000 { ; 说明SRAM的基地址和SIZE ,并且将RW和ZI Data放到SRAM中
; RW data
.ANY (+RW +ZI)
}
}
上面的Link Script 文件描述了3个段,RAM1段放在 SRAM 空间,ROM1 段放在地址 0 的地方,
FLASH1段放在 0x200。将该link script 文件填入keil,这样程序在连接的时候,连接器就会按照
Link Script的描述摆放程序。
只有放在地址
0x0000
的程序才需要用到
link script
,其它地址的程序不会有代码放在地址
0x0000
ISP 与 IAP 的区别