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
复制代码
|