📄 os_cpu_a.s
字号:
/******************************************************************************************************** * uC/OS-II * The Real-Time Kernel * Xtensa Core Specific code * * File : OS_CPU.H *********************************************************************************************************/#include <xtensa/coreasm.h>#include <xtensa/simcall.h> .global OSStartHighRdy /* Defined here */ .global OSStartHighRdy /* Defined here */ .global OSTaskSwHook /* Defined in OS_CPU_C.C */ .global OSTCBHighRdy /* UCOS variable */ .global OSRunning /* UCOS variable *//********************************************************************************************************* * START MULTITASKING * void OSStartHighRdy(void) * * Note : OSStartHighRdy() is called by OSStart() and MUST: * a) Call OSTaskSwHook() then, * b) Set OSRunning to TRUE, * c) Enable SW INTERRUPTS as these are used for the context switches!!! * c) Switch to the highest priority task. * * Prototype : void OSStartHighRdy(void) * **********************************************************************************************************/ .text .align 4_OSTCBHighRdy: .word OSTCBHighRdy /* UCOS variable */_OSRunning: .word OSRunning /* UCOS variable */#if OS_CPU_HOOKS_EN _OSTaskSwHook: .word OSTaskSwHook /* Defined in OS_CPU_C.C */#endif /* OS_CPU_HOOKS_EN */_OSCtxSwIntsEnable: .word OSCtxSwIntsEnable /* Defined in OS_CPU_C.C */ .text .align 4OSStartHighRdy: entry a1, 32 /* ** UCOS-II requires a call to OSTaskSwHook() */#if OS_CPU_HOOKS_EN l32r a3, _OSTaskSwHook callx8 a3#endif /* OS_CPU_HOOKS_EN */ /* ** Set the OSRunning */ l32r a2, _OSRunning /* a2 = OSRunning = &ValueOfOSRunning */ movi a3, 1 s8i a3, a2, 0 /* set ValueOfOSRunning = 1 = TRUE */ /* ** Enable context switch interrupts */ l32r a3, _OSCtxSwIntsEnable callx8 a3 /* ** Get the stack pointer of the task ready to run */ l32r a3, _OSTCBHighRdy /* a3 = *OSTCBHighRdy = &OSTCBHighRdy */ l32i a3, a3, 0 /* a3 = &OSTCBHighRdy = &ValueOfOSTCBHighRdy */ l32i a1, a3, 0 /* a1 = ValueOfOSTCBHighRdy */ /* ** Restore processor context and issue a "rfe" */ l32i a4, a1, 16 l32i a5, a1, 20 l32i a6, a1, 24 l32i a7, a1, 28 l32i a8, a1, 32 l32i a9, a1, 36 l32i a10, a1, 40 l32i a11, a1, 44 l32i a12, a1, 48 l32i a13, a1, 52 l32i a14, a1, 56 l32i a15, a1, 60 l32i a2, a1, 80 wsr a2, PS rsync l32i a0, a1, 84 wsr a0, EPC_1 l32i a0, a1, 76 wsr a0, SAR #if XCHAL_HAVE_LOOPS l32i a0, a1, 64 wsr a0, LBEG l32i a0, a1, 68 wsr a0, LEND l32i a0, a1, 72 wsr a0, LCOUNT#endif isync l32i a0, a1, 0 l32i a2, a1, 8 l32i a3, a1, 12 l32i a1, a1, 4 rfe
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -