完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
异常向量表的地址有两个,默认是0,然后可以通过设置CP15协处理器把他设为0xffff0000。
|
|
|
|
把他设为0xffff0000,和0x0映射,对么?设为0xffff0000就是虚拟地址,运行在RAM内存中,而0x0是实际的物理地址
|
|
|
|
CPU上电是从0地址开始执行的,执行的第一句就是异常向里表中0x00处的代码reset,此句是一个跳转,这一跳就不会再回来了,只有当发生中断等异常时,CPU才会再回到向量表这边来再执行相应的跳转,比如IRQ中断。由此可以把异常向量表看作是CPU的起点,中途发生了任何异常她都要回到这个起点。所以这个向量表的存在是非常关键的,一旦存放她的位置被破坏,CPU就会迷路。所以向量表通常都是存放在ROM、nor FLASH等非易失性存储介质中。这些介质有个特点CPU可以从她们的0地址处开始执行。那现在有个问题,如果设备上没有这些介质,比如我只有NAND,那怎么启动呢,这个厂家肯定在设计时会提供方法,比如2440,片内有一块称为“xxxstone”,具体名称不记得了,这个称为片内内存,电电时会将NAND的前4K复制到这里,它的起始地址就是0,所以这里似乎认为向量表是在RAM里的,这样认为也没有说错。下面还有一个问题,对于开了MMU的情况,还可认为向量表起始地址是其他的地址,这个地址就要看你的MMU怎么设置,通常是将0x00000000映射到物理上的0地址。
希望上面分析可以帮助你,如有不对欢迎指正。 以上来自网友nux 的回复 |
|
|
|
异常向表是在ROM中,但通常为了提高效率,会将RAM的地址映射到ROM中,比如映射到0x00地址
|
|
|
|
0和0xffff0000都是虚拟地址
|
|
|
|
或者说,在开启MMU的情况下,0和0xffff0000都是虚拟地址,而他们对应的物理地址则不限。
在不开启MMU的情况下,则一般把向量表放到物理地址为0的内存里,这是因为不开启MMU的话0xffff0000一般不会指向内存的,只有0才指向内存。 要是再看不懂,我就懒得再解释了,你随便找本 ARM体系结构 的书都有非常详细的解释。 |
|
|
|
能看懂了,谢谢你的耐心解释,受教了
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2139 浏览 6 评论
1947 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4500 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 02:14 , Processed in 0.730389 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号