异常向量表

            今天网上下载了一个操作系统,编译,运行,木有反应。跟移植者讨论了下,后来发现是异常向量表表的问题。他并没有开启MMU,而我是bootloader引导下载.bin代码的。0地址处存放的是bootloader,操作系统本身也要从0地址处读取向量表的信息,包括reset中断,设置堆栈指针等一系列的问题。找不到中断向量表,那其他的步骤就无从谈起了。所以后来解决方法是使用的tq2440的bootloader中的menu choice 1 ,即将 此操作系统下载到 nandflash的bootloader分区。然后再将tq的开关调制从nandflash启动。那样就能够正常运行了。

          至此,分析了下有无bootloader的读取中断向量表的情况:

          有bootloader的时候,在bootloader的引导下,将程序下载到响应的地址,大于0x30000000(sdram区域),然后运行,此时发生异常时,到0地址处取异常向量表。因为此时程序是在sdram中的,如从0x30000000开始存放的,那异常向量表就在0x30000000处,此时如果发生异常的话,从0地址找就找不到,所以两种方法,一种开启MMU,映射0地址到0x30000000处,另外一种是在程序里面进行异常向量表的拷贝,拷贝到0地址。     
在没有bootloader的时候,直接烧到0地址,但是在代码中执行了cp2sdram的操作,目标地址是0x30000000,此时有两个地方存着异常向量表,一是0地址,二是0x30000000处,没有进行MMU的时候程序读取的是0地址处的异常向量表,如果进行映射了的话,异常出现的时候,也还是去0地址找,但是此时0地址已经被MMU映射了,所以到相关映射的地址处寻找。

           要点:发生异常,永远是去0地址找。(特指arm下)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值