xiaozi022121 发表于 2012-7-13 11:06:09

关于堆栈初始化问题请教,请问如下两种方式的本质区别...

方法一:
.......
; Stack
Unused_Stack_SizeEQU   0x00000100
Svc_Stack_Size   EQU   0x00001000
Abt_Stack_Size   EQU   0x00000100
Fiq_Stack_Size   EQU   0x00000100
Irq_Stack_Size   EQU   0x00001000
Usr_Stack_Size   EQU   0x00001000

ISR_Stack_SizeEQU   (Unused_Stack_Size + Svc_Stack_Size + Abt_Stack_Size + \
                         Fiq_Stack_Size + Irq_Stack_Size)

                AREA    STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem       SPACE   Usr_Stack_Size
__initial_sp    SPACE   ISR_Stack_Size

Stack_Top
........
****************************************************************
;* Initialize Stack Pointer
;****************************************************************

; Setup Stack for each mode
                LDR   R0, =Stack_Top

;Enter Undefined Instruction Mode and set its Stack Pointer
                MSR   CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV   SP, R0
                SUB   R0, R0, #Unused_Stack_Size
.........

方法二(0x04000000是ram地址)
SP_USR          EQU      0x0400fff0;USR模式下的堆栈首指针
SP_SYS          EQU           0x0400fef0;SYS模式下的堆栈首指针
SP_SVC          EQU      0x0400fdf0;SVC模式下的堆栈首指针
SP_IRQ          EQU      0x0400fbf0;IRQ模式下的堆栈首指针
SP_FIQ          EQU      0x0400faf0        ; FIQ模式下的堆栈首指针
SP_UND          EQU   0x0400f9f0;UND模式下的堆栈首指针
SP_ABT          EQU   0x0400f8f0        ;ABT模式下的堆栈首指针
......


ldr                sp, =SP_SVC                ;init sp_svc   
mov                R4, #0xD2                        ;chmod to irq and init sp_irq         
msr                cpsr_cf, R4      
ldr                sp, =SP_IRQ   
......
请问如上两种方式堆栈方式绝对地址和相对地址有关吗?

xiaozi022121 发表于 2012-7-13 13:31:15

自己顶一下……请指点啊
页: [1]
查看完整版本: 关于堆栈初始化问题请教,请问如下两种方式的本质区别...