我看到LPC2000资料上说:<br />由于处理器复位后,映射到0x00000000-0x0000003F地址空间的异常向量表源于bootload子块,因此CPU开始执行的实际上是philips在芯片出厂前写入bootload的程序。<br />问题:<br />1,bootload区本来就有异常向量表吗?如果有,为什么还要用户自己写<br />2,bootload区又重新映射到片内FLASH的最高地址,这个是硬件自动完成的吗?<br />3,不管中断向量表在什么地方,运行中,总是以0x00-0x3f可见,那么我做SMARTARM2200的实验《2.13_存储器重映射实验》时,不是破坏了中断向量表了么?<br />我是ARM新手,对这个BOOTLOAD和REMAP感到难理解,望朋友们不吝赐教啊<br /><br />程序如下<br />/****************************************************************************<br />* 文 件 名:REMAP.C<br />* 功 能:将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改0x40000000~<br />* 0x4000003F的内容。<br />* 说 明:观察0x00000000~0x0000003F地址上的数据有何变化<br />****************************************************************************/<br />#include "config.h"<br /><br />#define VECTOR_RAM ((unsigned char *) 0x40000000)<br /><br />/****************************************************************************<br />* 名 称:main()<br />* 功 能:存储器重映射。<br />****************************************************************************/<br />int main(void)<br />{ <br /> uint8 i;<br /> uint8 *addr;<br /><br /> MEMMAP = 0x02; // 中断向量从静态RAM重映射(用户RAM模式)<br /><br /> addr = VECTOR_RAM;<br /> for(i=0; i<64; i++) // 用0x55填充0x40000000~0x4000003F<br /> { <br /> *addr = 0x55;<br /> addr++;<br /> }<br /> <br /> addr = VECTOR_RAM;<br /> for(i=0; i<64; i++) // 用0xAA填充0x40000000~0x4000003F<br /> { <br /> *addr = 0xAA;<br /> addr++;<br /> }<br /><br /> MEMMAP = 0x00; // 中断向量从Boot Block重映射(Boot装载程序模式)<br /> <br /> while(1);<br /> return(0);<br />}<br /> |
|