oshal.s

来自「一个简单而又高效的嵌入式操作系统.包括GUI及文件系统.仿Windows设计,类」· S 代码 · 共 66 行

S
66
字号
	IMPORT pOsNextThread
	IMPORT pOsCurThread
	IMPORT _ISR_STARTADDRESS
	EXPORT HAL_CreateThread
	EXPORT SoftSchedule
	EXPORT IntSchedule
	
    AREA    Hal,CODE,READONLY
HAL_CreateThread
	stmfd r2!,{r3} ;相同于pc
	stmfd r2!,{r0,r1,r3-r13} ;相同于{r0-r12}
	mrs r1,cpsr
	stmfd r2!,{r1,lr} ;相同于cpsr,lr;
	str r2, [r0] ;把sp写入TCB中
	mov pc,lr
    
IntSchedule
	;保存IRA IRA=*(sp+20);*(sp+20)=IntSche;
	ldr	r0,[sp,#20]
	ldr r1,=_ISR_STARTADDRESS
	str	r0,[r1];
	ldr r0,=IntSche
	add	r0,r0,#4
	str	r0,[sp,#20]
	mov pc,lr
IntSche
	; sp-=4;//for IRA
	sub sp ,sp,#4
	;Save Registers;
	stmfd sp!,{r0-r12}
	mrs r0,cpsr
	stmfd sp!,{r0,lr}
	;*(sp+_60)=IRA;
	ldr r0,=_ISR_STARTADDRESS
	ldr	r0,[r0]
	sub	r0,r0,#4
	str r0,[sp,#60]
	b	Sche_Run
SoftSchedule
	;save all register and pc
	sub sp ,sp,#4
	stmfd sp!,{r0-r12}
	mrs r0,cpsr
	stmfd sp!,{r0,lr}
	ldr r0,=Sche_end
	str r0,[sp,#60]
Sche_Run
	;pOsCurThread=pOsNextThread;
	ldr 	r0,=pOsCurThread
	ldr 	r1,[r0]
	ldr 	r2,=pOsNextThread
	ldr 	r2,[r2]
	str 	r2,[r0]
	;pOldCurThread.sp=sp;
	str 	sp,[r1]
	;sp=pOsNextThread.sp;
	ldr		sp,[r2]
	;restore all resisters;
	ldmfd sp!,{r0,lr}
	msr cpsr_fsxc,r0
	ldmfd sp!,{r0-r12}
	ldmfd sp!,{pc}
Sche_end
	mov pc,lr

	END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?