小弟今天刚开始看redboot启动代码,发现一个问题请各位大侠指教?就是这条语句UNMAPPED_PTR(reset_vector)的目的何在?为啥不可以写成PTR(reset_vector)呢?<br />先谢过各位!!!!!<br />#ifndef UNMAPPED <br />#ifdef CYGHWR_HAL_ARM_HAS_MMU<br /># ifndef CYGHWR_HAL_ROM_VADDR<br /># define CYGHWR_HAL_ROM_VADDR __exception_handlers<br /># endif<br /># define UNMAPPED(x) ((x)-CYGHWR_HAL_ROM_VADDR)<br />#else<br /># define UNMAPPED(x) (x)<br />#endif<br />#endif <br /> <br />#define UNMAPPED_PTR(name) <br />.##name: .word UNMAPPED(name)<br />#define PTR(name) <br />.##name: .word name<br /><br /> .global __exception_handlers<br />__exception_handlers:<br />#ifdef CYGSEM_HAL_ROM_RESET_USES_JUMP<br />// Assumption: ROM code has these vectors at the hardware reset address.<br />// A simple jump removes any address-space dependencies [i.e. safer]<br /> b reset_vector // 0x00<br />#else <br /> ldr pc,.reset_vector // 0x00<br />#endif <br /> ldr pc,.undefined_instruction // 0x04<br /> ldr pc,.software_interrupt // 0x08 start && software int<br /> ldr pc,.abort_prefetch // 0x0C<br /> ldr pc,.abort_data // 0x10<br /> .word 0 // unused<br /> ldr pc,.IRQ // 0x18<br /> ldr pc,.FIQ // 0x1C<br /><br />// The layout of these pointers should match the vector table above since<br />// they are copied in pairs.<br /> .global vectors<br />vectors:<br />UNMAPPED_PTR(reset_vector) // 0x20<br />PTR(undefined_instruction) // 0x24<br />PTR(software_interrupt) // 0x28<br />PTR(abort_prefetch) // 0x2C<br />PTR(abort_data) // 0x30<br /> .word 0 // 0x34<br />PTR(IRQ) // 0x38<br />PTR(FIQ) // 0x3c<br />#ifdef CYGSEM_HAL_ARM_PID_ANGEL_BOOT <br />PTR(start) // This is copied to 0x28 for bootup // 0x40<br />#endif <br /> |
|