📄 os_cpu_c.src
字号:
; ; B
; ; ACC
; ; HARDWARE STACK CONTENT(NOT INCLUDE REGISTERS) 2+SmltStkSize
; ; HARDWARE STACK SIZE(INCLUDE REGISTERS) 1+SmltStkSize
; ; SIMULATED STACK CONTENT 1
; ; ?C_IBP 0
;
; *********************************************************************************************************
; */
; OS_STK *OSTaskStkInit (void (*task)(void *pd) reentrant, void *os_pdata, OS_STK *ptos, INT16U opt) reentrant
RSEG ?PR?_?OSTaskStkInit?OS_CPU_C
_?OSTaskStkInit:
USING 0
; SOURCE LINE # 179
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
LCALL ?C?PSTXDATA
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
; {
; OS_STK *stk;
;
; os_pdata = os_pdata;
; SOURCE LINE # 183
MOV DPTR,#06H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV DPTR,#06H
LCALL ?C?XBPOFF
LCALL ?C?PSTXDATA
; opt = opt; //opt没被用到,保留此语句防止告警产生
; SOURCE LINE # 184
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
;
; stk = (OS_STK *)ptos; //用户堆栈最低有效地址
; SOURCE LINE # 186
MOV DPTR,#09H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PSTXDATA
;
; *stk++ = 2 + 13; /* tow bytes of return address and 13 byte registers */
; SOURCE LINE # 188
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#0FH
LCALL ?C?CSTPTR
; *stk++ = (INT16U)task & 0xFF; /* low byte of return address */
; SOURCE LINE # 189
MOV DPTR,#03H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV R7,AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,R7
LCALL ?C?CSTPTR
; *stk++ = (INT16U)task >> 8; /* high byte of return address */
; SOURCE LINE # 190
MOV DPTR,#03H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV A,R2
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,R7
LCALL ?C?CSTPTR
; *stk++ = 0x0A; /* ACC */
; SOURCE LINE # 191
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#0AH
LCALL ?C?CSTPTR
; *stk++ = 0x0B; /* B */
; SOURCE LINE # 192
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#0BH
LCALL ?C?CSTPTR
; *stk++ = 0xD1; /* DPH */
; SOURCE LINE # 193
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#0D1H
LCALL ?C?CSTPTR
; *stk++ = 0xD0; /* DPL */
; SOURCE LINE # 194
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#0D0H
LCALL ?C?CSTPTR
; *stk++ = 0x00; /* PSW */
; SOURCE LINE # 195
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
CLR A
LCALL ?C?CSTPTR
; *stk++ = 0x00; /* R0 */
; SOURCE LINE # 196
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOV B,#01H
LCALL ?C?PLDIXDATA
CLR A
LCALL ?C?CSTPTR
; *stk++ = 0x01; /* R1 */
; SOURCE LINE # 197
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#01H
LCALL ?C?CSTPTR
; *stk++ = 0x02; /* R2 */
; SOURCE LINE # 198
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#02H
LCALL ?C?CSTPTR
; *stk++ = 0x03; /* R3 */
; SOURCE LINE # 199
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#03H
LCALL ?C?CSTPTR
; *stk++ = 0x04; /* R4 */
; SOURCE LINE # 200
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#04H
LCALL ?C?CSTPTR
; *stk++ = 0x05; /* R5 */
; SOURCE LINE # 201
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#05H
LCALL ?C?CSTPTR
; *stk++ = 0x06; /* R6 */
; SOURCE LINE # 202
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#06H
LCALL ?C?CSTPTR
; *stk++ = 0x07; /* R7 */
; SOURCE LINE # 203
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
MOV A,#07H
LCALL ?C?CSTPTR
;
; return ((void *)ptos);
; SOURCE LINE # 205
MOV DPTR,#09H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
; }
; SOURCE LINE # 206
?C0007:
MOV DPTR,#0EH
LJMP ?C?ADDXBP
; END OF _?OSTaskStkInit
;
; /*$PAGE*/
;
; /*
; *********************************************************************************************************
; * TASK SWITCH HOOK
; *
; * Description: This function is called when a task switch is performed. This allows you to perform other
; * operations during a context switch.
; *
; * Arguments : none
; *
; * Note(s) : 1) Interrupts are disabled during this call.
; * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
; * will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
; * task being switched out (i.e. the preempted task).
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0
; void OSTaskSwHook (void) reentrant
RSEG ?PR?_?OSTaskSwHook?OS_CPU_C
_?OSTaskSwHook:
; SOURCE LINE # 226
; {
; }
; SOURCE LINE # 228
RET
; END OF _?OSTaskSwHook
; #endif
;
; /*
; *********************************************************************************************************
; * OSTCBInit() HOOK
; *
; * Description: This function is called by OS_TCBInit() after setting up most of the TCB.
; *
; * Arguments : ptcb is a pointer to the TCB of the task being created.
; *
; * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
; void OSTCBInitHook (OS_TCB *ptcb) reentrant
RSEG ?PR?_?OSTCBInitHook?OS_CPU_C
_?OSTCBInitHook:
USING 0
; SOURCE LINE # 243
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
LCALL ?C?PSTXDATA
; {
; ptcb = ptcb; /* Prevent Compiler warning */
; SOURCE LINE # 245
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PSTXDATA
; }
; SOURCE LINE # 246
MOV DPTR,#03H
LJMP ?C?ADDXBP
; END OF _?OSTCBInitHook
; #endif
;
;
; /*
; *********************************************************************************************************
; * TICK HOOK
; *
; * Description: This function is called every tick.
; *
; * Arguments : none
; *
; * Note(s) : 1) Interrupts may or may not be ENABLED during this call.
; *********************************************************************************************************
; */
; #if OS_CPU_HOOKS_EN > 0
; void OSTimeTickHook (void) reentrant
RSEG ?PR?_?OSTimeTickHook?OS_CPU_C
_?OSTimeTickHook:
; SOURCE LINE # 262
; {
; }
; SOURCE LINE # 264
RET
; END OF _?OSTimeTickHook
; #endif
;
;
; /*
; *********************************************************************************************************
; * 中断服务程序外挂
; * NOTE : 注意:所有中断外挂都在临界区之外,用户可以自行控制进/退临界区
; *********************************************************************************************************
; */
; #if OS_ISR_T1_EN > 0
; void OSISR_T1HOOK (void) reentrant
; {
; /* 请在这里输入中断服务程序 */
; }
; #endif
;
; #if OS_ISR_INT0_EN > 0
; void OSISR_INT0HOOK (void) reentrant
; {
; /* 请在这里输入中断服务程序 */
; }
; #endif
;
; #if OS_ISR_INT1_EN > 0
; void OSISR_INT1HOOK (void) reentrant
; {
; /* 请在这里输入中断服务程序 */
; }
; #endif
;
; #if OS_ISR_S0_EN > 0
; void OSISR_S0HOOK (void) reentrant
RSEG ?PR?_?OSISR_S0HOOK?OS_CPU_C
_?OSISR_S0HOOK:
; SOURCE LINE # 296
; {
; /* 请在这里输入中断服务程序 */
; }
; SOURCE LINE # 299
RET
; END OF _?OSISR_S0HOOK
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -