www.pudn.com > uCOS+GUI.rar > InitStack.S


;/* 
;********************************************************************************************************* 
;* 文件: InitStack.S 
;* 描述: 初始化各种模式的堆栈指针. 
;* 编写: 深思 (001-12345@sohu.com). 
;********************************************************************************************************* 
;*/ 
 
;/* 
;********************************************************************************************************* 
;* 描述: 认真分配各种模式的堆栈大小,避免溢出. 
;********************************************************************************************************* 
;*/ 
FIQ_Stack_Legth     EQU        1024*5           ; 快速中断模式堆栈空间. 
IRQ_Stack_Legth     EQU        1024*50          ; 中断模式堆栈空间. 
ABT_Stack_Legth     EQU          0*4            ; 中止义模式堆栈空间. 
UND_Stack_Legth     EQU          0*4            ; 未定义模式堆栈 
SVC_Stack_Legth     EQU        1024*5           ; 管理模式堆栈的大小. 
SYS_Stack_Legth     EQU          0*4            ; 系统模式堆栈的大小(可以与其它模式堆栈共用). 
 
;/* 
;********************************************************************************************************* 
;* 描述: 申请 RAM 空间. 
;********************************************************************************************************* 
;*/ 
   AREA    MyStacks, DATA, NOINIT, ALIGN=2 
 
FiqStackSpace      SPACE   FIQ_Stack_Legth 
IrqStackSpace      SPACE   IRQ_Stack_Legth 
AbtStackSpace      SPACE   ABT_Stack_Legth 
UndStackSpace      SPACE   UND_Stack_Legth 
SvcStackSpace      SPACE   SVC_Stack_Legth 
SysStackSpace      SPACE   SYS_Stack_Legth 
 
bottom_of_heap     SPACE   256                  ; 库函数的堆空间 
 
        EXPORT  __user_initial_stackheap 
        EXPORT  InitStack 
 
        AREA    InitStack1,CODE,READONLY 
        CODE32 
 
;/* 
;********************************************************************************************************** 
;* 函数: InitStack. 
;* 功能: 初始化堆栈, 退出后将在 sys 模式. 
;********************************************************************************************************** 
;*/ 
InitStack 
        MOV     R0,     LR 
 
        LDR     SP,     SvcStack                ; 设置管理模式堆栈. 
 
        MSR     CPSR_c, #0x0d2                  ; 设置中断模式堆栈. 
        LDR     SP,     IrqStack 
 
        MSR     CPSR_c, #0x0d1                  ; 设置快速中断模式堆栈. 
        LDR     SP,     FiqStack 
 
        MSR     CPSR_c, #0x0d7                  ; 设置中止模式堆栈. 
        LDR     SP,     AbtStack 
 
        MSR     CPSR_c, #0x0db                  ; 设置未定义模式堆栈. 
        LDR     SP,     UndStack 
 
        MSR     CPSR_c, #0x0df                  ; 设置用户/系统模式堆栈. 
        LDR     SP,     SysStack 
 
        MOV     PC,     R0 
 
;/* 
;******************************************************************************************************* 
;* 函数: __user_initial_stackheap. 
;* 功能: 库函数初始化堆和栈,不要删除. 
;******************************************************************************************************* 
;*/ 
__user_initial_stackheap 
        LDR     R0,   =bottom_of_heap 
        MOV     PC,   LR 
 
;/* 
;******************************************************************************************************* 
;* 功能: 文字池. 
;******************************************************************************************************* 
;*/ 
 
FiqStack      DCD   FiqStackSpace + FIQ_Stack_Legth 
IrqStack      DCD   IrqStackSpace + IRQ_Stack_Legth 
AbtStack      DCD   AbtStackSpace + ABT_Stack_Legth 
UndStack      DCD   UndStackSpace + UND_Stack_Legth 
SvcStack      DCD   SvcStackSpace + SVC_Stack_Legth 
SysStack      DCD   IrqStackSpace + IRQ_Stack_Legth 
 
;/* 
;********************************************************************************************************* 
        END 
;********************************************************************************************************* 
;*/