3:在OS_CPU_A.ASM中用汇编写4个与处理器相关的函数
需要移植的函数有,如下所示,OSStartHighRdy():在调用OSStart()函数时,使就绪态任务中优先级最高的任务开始运行
OSCtxSw():
OSIntCtxSw():
OSTickISR():
OS_CPU_SR_Save()
OS_CPU_SR_Restore():
OSCtxSw():可以参考学习笔记中的记录,M3中任务切换还需实现软中断的处理函数
OSCtxSw ;悬起PSV异常
LDR R0, =NVIC_INT_CTRL
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
BX LR
OSIntCtxSw():在退出中断前调用OSIntCtxSw,在ISR中执行任务的切换功能,OSIntCtxSw与OSCtxSw基本相同,M3的是一模一样的。
OSPendSV 【软中断的处理函数】
MRS R0, PSP
CBZ R0, OSPendSV_nosave
SUBS R0, R0, #0x20
STM R0, {R4-R11}
LDR R1, __OS_TCBCur
LDR R1, [R1]
STR R0, [R1]
OSPendSV_nosave
PUSH {R14}
LDR R0, __OS_TaskSwHook ; OSTaskSwHook();
BLX R0
POP {R14}
LDR R0, __OS_PrioCur
LDR R1, __OS_PrioHighRdy
LDRB R2, [R1]
STRB R2, [R0]
LDR R0, __OS_TCBCur
LDR R1, __OS_TCBHighRdy
LDR R2, [R1]
STR R2, [R0]
LDR R0, [R2]
LDM R0, {R4-R11}
ADDS R0, R0, #0x20
MSR PSP, R0
ORR LR, LR, #0x04
BX LR
|