WINCE异常向量地址问题

    根据S3C2410芯片的CP15协处理器,可以将其异常向量的地址选择是高地址或是低地址。比如高地址的复位向量是0xFFFF 0000, 低地址的复位向量是0x0000 0000。对于使用ADS调试测试代码,我们通常都是使用低向量地址,因为S3C2410芯片自带一个4K的steppingStone,可以利用这4K的RAM作为向量地址的物理存储空间。

        而WINCE是使用高异常向量地址,这个是在armTrap.s里面设置的,同时也在这个文件里设置了所有异常向量的地址。这里就有一个疑问了,在0xFFFF 0000的这个地址处并没有物理的存储空间可以存放代码啊?

        我的理解是,WINCE启动首先是由OAL的startUp函数开始,在这个函数的末尾,他传递一个OemAddressTable的物理地址和虚拟地址的映射表给OS,然后跳转到KernelStart这个函数执行,这个函数首先就是根据传过来的表配置虚拟内存,在第二级页表时也配置好了0xFFFF 0000这个向量入口地址到某一个物理地址处,也就是说该0xFFFF 0000并不是某一个物理地址,它是一个虚拟地址,OS映射了一个物理地址给它,这样这些异常处理函数的入口就有实际的意义了,因此上面的疑问就可以解决了。

        我设想的跳转过程是这样的,以复位异常为例。当设置为低异常向量地址,且没有使能MMU。当复位异常产生时,内核(不是OS,而是处理器内核)强制从0x0000 0000处取指,通常我们都会在0x0000 0000处放置一条跳转指令,然后执行复位异常。当设置为高异常向量地址,且使能了MMU,也就是WINCE的这种情况时,当复位异常产生时,内核(同样还是处理器内核)强制从0xFFFF 0000处取指,因为使能了MMU,它会自动将这个地址映射到对应的物理地址处,这样就跳转到了合适的异常处理程序的入口了。

       我没有仔细的分析过armtrap.s的代码,请高手指教啊。等仔细分析过后,如果能分析通的话,我会把代码分析贴上来的。

       希望有朋友可以一起沟通,交流!

       my name: leo     Email: _leo@live.cn (注意leo前有个下划线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值