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 + -
显示快捷键?