|
PRESERVE8<br /><br />Vectors LDR PC, Reset_Addr <br /> LDR PC, Undef_Addr<br /> LDR PC, SWI_Addr<br /> LDR PC, PAbt_Addr<br /> LDR PC, DAbt_Addr<br /> NOP ; Reserved Vector <br /> LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr<br /> LDR PC, FIQ_Addr<br /><br />Reset_Addr DCD Reset_Handler<br />Undef_Addr DCD Undef_Handler<br />SWI_Addr DCD SWI_Handler<br />PAbt_Addr DCD PAbt_Handler<br />DAbt_Addr DCD DAbt_Handler<br /> DCD 0xB9206E28 ; Reserved Address <br />IRQ_Addr DCD IRQ_Handler<br />FIQ_Addr DCD FIQ_Handler<br /><br />Undef_Handler B Undef_Handler<br />SWI_Handler B SWI_Handler<br />PAbt_Handler B PAbt_Handler<br />DAbt_Handler B DAbt_Handler<br />IRQ_Handler B IRQ_Handler<br />FIQ_Handler B FIQ_Handler<br /><br /><br />; Reset Handler<br /><br /> EXPORT Reset_Handler<br />Reset_Handler <br /><br />; Setup Stack for each mode<br /> LDR R0, =Stack_Top<br /><br />; Enter Undefined Instruction Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit<br /> MOV SP, R0<br /> SUB R0, R0, #UND_Stack_Size<br /><br />; Enter Abort Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit<br /> MOV SP, R0<br /> SUB R0, R0, #ABT_Stack_Size<br /><br />; Enter FIQ Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit<br /> MOV SP, R0<br /> SUB R0, R0, #FIQ_Stack_Size<br /><br />; Enter IRQ Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit<br /> MOV SP, R0<br /> SUB R0, R0, #IRQ_Stack_Size<br /><br />; Enter Supervisor Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit<br /> MOV SP, R0<br /> SUB R0, R0, #SVC_Stack_Size<br /><br />; Enter User Mode and set its Stack Pointer<br /> MSR CPSR_c, #Mode_USR<br /> MOV SP, R0 ;标号1<br /> SUB SL, SP, #USR_Stack_Size<br /> <br /> IMPORT TargetResetInit<br /> BL TargetResetInit<br />; Enter the C code<br /><br /> IMPORT __main<br /> LDR R0, =__main<br /> BX R0<br /><br /><br />; User Initial Stack & Heap<br /> AREA |.text|, CODE, READONLY<br /><br /> IMPORT __use_two_region_memory<br /> EXPORT __user_initial_stackheap<br />__user_initial_stackheap<br /><br /> LDR R0, =Heap_Mem<br /> MOV pc,lr<br /><br /> END<br /><br />这是全部的启动代码,箭头在标号1的行首时,User/system里的r0=0x0006AB0,点击单步执行step in后,立马死循环,停止后<br /> 7fffe154 [0x6948499f] dcd 0x6948499f .IHi<br />此时User/system里的r0=0x27ffffff<br />感觉是存储配置出了问题,可是想不出原因<br /><br />
|