上电后FLASH地址0,代码开始在0地址处运行-〉执行重映射将FLASH映射到0x7F000000,将SDRAM映射到0。跳转到0x7f000000+偏移量处运行,会没解决方案

上电后FLASH地址0,代码开始在0地址处运行-〉执行重映射将FLASH映射到0x7F000000,将SDRAM映射到0。跳转到0x7f000000+偏移量处运行,会没
上电后FLASH地址0,代码开始在0地址处运行-〉执行重映射将FLASH映射到0x7F000000,将SDRAM映射到0。跳转到0x7f000000+偏移量处运行,会没有效果?看到书上说在这映射和跳转执行之间需要IMB,请大家指教指教

------解决方案--------------------
一旦硬件设计好了,存储器被映射的地址是不可以重新设置的。

一般的设计是:
FLASH地址空间:0x0-0x* 要看你的flash大小,或者多片flash。
SDRAM地址空间:0xC000000-0x* 还是要看你的SDRAM大小。

上电后,首先从0x0处加载代码并引导执行(片外启动方式)。
代码一般会将FLASH中的0x0-0x40000(bootloader代码)复制(映射)
到SDRAM中的0xC700000开始处,然后运行bootloader。
------解决方案--------------------
存储器映射地址确实是可以更改的,例如arm芯片就是典型的例子。
在arm芯片系统中,起始时刻flash被映射到0地址开始的空间中(bootloader就在flash中)。之后由于中断表要放在0地址处,因此必须把sdram给映射到0地址处,同时把flash地址“挪”到高地址去。在设计这个过程的时候,如果不想复制启动映象,还要用到arm的三级流水线的特性才行。
------解决方案--------------------
“一旦硬件设计好了,存储器被映射的地址是不可以重新设置的。”
我说错了,应该是:
“一旦硬件设计好了,存储器的地址是不可以重新设置的。”
为了加快访问速度,一般需要把Flash数据映射到SDRAM中,
以后如果要读Flash,就可以直接读SDRAM中映射的地址就可以了。