在使用lpc1768的过程中,看到realview和周立功的代码有很大的不同。
周立功的代码中,开始还真看不出是怎么安排向量表在0地址的。直到有一次努力看这个地方时,把不相关的代码一点点删去,编译时给出错误,提示到inchip.sct文件,打开一看,如下,加了几行注释:
ROM_LOAD 0x00000000 //加载区从0开始
{
VECTOR 0x00000000 //向量表 地址0开始
{
vector_table.o (+RO) //向量表 只读
}
ROM_EXEC +0
{
*.o (+RO) //其他程序代码
}
SRAM 0x10000000
{
* (+RW,+ZI) //变量空间 读写
}
HEAP +0 UNINIT
{
rt_sys_s.o (Heap) //堆
}
}
原来如此,就是所有代码都是c的或者是可重定位的,在这个文件里面做地址安排,把vector安排在前面0地址处。就完事了。当然要在link中的scatter file指明.\cfg_file\Startup\InChip.sct,但是下面的entry _main还有用吗?
keil原来的方式是标准的c方式,从startup.s开始,里面用汇编语言制定绝对地址,看上去很明确,安排好头尾,把控制权交给main。
上传两个简单的程序把这个过程示例清楚。两个GPIO的简单程序。单片机是lpc1768的。