xinzha发表于 2009-9-6 10:21 | 只看该作者 回复 引用 订阅 报告 收藏 分享 评分楼主: 探讨一下ARM以及RVDS的使用ARM, RVDS, 探讨本帖最后由 xinzha 于 2009-9-6 10:54 编辑
最近太闲,想给自己找点事做,开个贴跟大家交流一下ARM和RVDS的使用,共同进步一下,说的不对的地方请多多指教。
ARM是个充满争议的架构,有人说它是RISC,因为它基本做到了指令等长以及指令周期可预期(不考虑ARM/THUMB混用),并且指令数目远远少于CISC,可反对者认为它只是个类RISC,因为它的桶形移位器的存在,并且现在已经添加了非常多的多媒体指令。无论如何,这是一款优秀的cpu,因为它占有率第一。不知道MIPS改变市场策略之后能不能对ARM形成一定的冲击。
首先讨论一下Remap的问题,由于ARM上电启动后的中断向量地址表的位置不能改变,必须是在物理0x0地址,这就产生了一个问题,如果你的代码有一定的速度要求,需要启动后在RAM中运行,那每次中断产生都要去ROM或者FLASH中查找中断向量,会对系统性能有点小影响(当然如果你的代码允许全程运行在FLash中就无所谓)。为了应对这个问题,ARM公司推荐了一种做法,就是上电复位的时候0x0指向NV memory,而在复位后马上执行一个重映射的设置,执行之后NV memory的地址变成另外一个地址,比如说0x4000 0000,而此时RAM的首地址变成了0x0,只需把包含中断向量表的镜像拷贝到ram的起始地址并做相应配置,pc跳转到0x0开始执行,一个崭新的世界开始了。
由上面的问题又产生了另外一个问题,复位时的物理0x0地址应该放什么?一般的做法是一块rom或者Nor flash,里面是预先烧好的bootloader,执行这个bootloader的代码将运行镜像拷贝到相应的ram中(如果代码就在nv memory里执行,咱就把这步省了),所以这个bootloader中要包含相应的驱动程序,来从主机或者本板上读取文件。而前两天一位大侠(貌似叫itelectron)告诉我有些芯片可以把不能直接寻址的nand中的前4k代码拷贝到ram中,让我如梦初醒,又见到了一个美丽新世界。这种做法既免除了地址重映射的麻烦,又可以节省nor或者rom的开销,人才啊!不过这种做法已经不属于arm架构范畴,完全是芯片厂商的自由发挥。
|