⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 context.s

📁 VRTX操作系统
💻 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 + -