📄 context.s
字号:
;************************************************************************
;
;
; IMPORTANT - USE OF THIS SOFTWARE IS SUBJECT TO LICENSE RESTRICTIONS
; CAREFULLY READ THE LICENSE AGREEMENT BEFORE USING THE SOFTWARE
;
;
;*************************************************************************
; ORIGIN UK 35-0450.05-400
;******************************************************************
;
; ARM VRTRmc
;
;******************************************************************
;
; Description
; ===========
;
; CONTEXT.S - Task context switch
;
;
; Revision History
; ================
;
; Version Date Author Reason for Change
; 1.0 14/03/96 Samsung & P.Cumming Initial Version
; Derived from Samsung
;*******************************************************************
EXPORT |vmc_ContextSwitch|
EXPORT |vmc_ARMTaskStartup|
;****************************************************************************
; vmc_ContextSwitch : Task Context Switch Routine
;****************************************************************************
;
; vmc_ContextSwitch(&otcbp->pregs, &ntcbp->pregs)
;
AREA |C$$code$$vmc_ContextSwitch|, CODE, READONLY, INTERWORK
|vmc_ContextSwitch|
mrs a3,cpsr ;get CPSR
stmfd sp!,{a3,r4-r11,lr} ;make task context stack frame
;
; Task Context Stack Frame
;
; +---------------+
; | cpsr |
; +---------------+
; | r4 - r11 |
; +---------------+
; | pc |
; +---------------+
;
str sp,[a1] ;save old task's SP
ldr sp,[a2] ;get new task's SP
ldmfd sp!,{a3} ;get new task's status
msr cpsr,a3 ;restore new task's CPSR
IF Thumb = {FALSE}
ldmfd sp!,{r4-r11,pc} ;return to new task
ELSE
ldmfd sp!,{r4-r11,lr} ;transfer pc to lr
bx lr ;return new task
ENDIF
;****************************************************************************
; vmc_ARMTaskStartup : ARM Processor Task Startup Routine
;****************************************************************************
AREA |C$$code$$vmc_ARMTaskStartup|, CODE, READONLY, INTERWORK
|vmc_ARMTaskStartup|
IF Thumb = {FALSE}
ldmfd sp!,{a1,lr,pc}
ELSE
ldmfd sp!,{a1,a2,a3} ;r1 temp scratch register to store lr
mov lr,a2 ;transfer lr
bx a3 ;branch taskaddr
ENDIF
;
; Initial Task Context Stack Frame
;
; +---------------+
; | cpsr |
; +---------------+
; | r4 - r11 |
; +---------------+
; | pc | <--- vmc_ARMTaskStartup
; +---------------+
; | Task Argument |
; +---------------+
; | Exit Handler |
; +---------------+
; |Task Start Addr| <--- void task(void *argument);
; +---------------+
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -