www.pudn.com > vrtxtst.rar > 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