📄 osal_tasks.s51
字号:
INC DPTR
LCALL ?Subroutine0 & 0xFFFF
// 115 newTask->events = 0;
??CrossCallReturnLabel_3:
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 116 newTask->next = (osalTaskRec_t *)NULL;
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 117
// 118 // 'ptr' is the address of the pointer to the new task when the new task is
// 119 // inserted. Initially it is set to address of 'tasksHead' in case the new
// 120 // task is higher priority than the existing head or the queue is empty.
// 121 ptr = &tasksHead;
MOV R4,#(tasksHead & 0xff)
MOV R5,#((tasksHead >> 8) & 0xff)
// 122 srchTask = tasksHead;
MOV DPTR,#tasksHead
SJMP ??osalTaskAdd_2
// 123 while (srchTask) {
// 124 if (newTask->taskPriority > srchTask->taskPriority) {
// 125 // insert here. New task has a higher priority than the task
// 126 // with which is being compared and a lower or equal priority
// 127 // to any task that precedes it.
// 128 newTask->next = srchTask;
// 129 *ptr = newTask;
// 130 return;
// 131 }
// 132 // set 'ptr' to address of the pointer to 'next' in the current
// 133 // (soon to be previous) task control block
// 134 ptr = &srchTask->next;
??osalTaskAdd_3:
MOV A,R0
MOV R4,A
MOV A,R1
MOV R5,A
// 135 srchTask = srchTask->next;
MOV DPL,R0
MOV DPH,R1
??osalTaskAdd_2:
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,R0
JNZ ??osalTaskAdd_4
MOV A,R1
??osalTaskAdd_4:
JZ ??osalTaskAdd_5
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
CLR C
SUBB A,R6
JNC ??osalTaskAdd_3
MOV DPL,R2
MOV DPH,R3
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 136 }
// 137
// 138 // We're at the end of the current queue. New task is not higher
// 139 // priority than any other already in the list. Make it the tail.
// 140 // (It is also the head if the queue was initially empty.)
// 141 *ptr = newTask;
??osalTaskAdd_5:
MOV A,R2
MOV R0,A
MOV A,R3
MOV R1,A
MOV DPL,R4
MOV DPH,R5
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
??osalTaskAdd_1:
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 15)
MOV R7,#0x7
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 142 }
// 143 return;
// 144 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiCond3 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_3
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 18)
CFI Block cfiCond4 Using cfiCommon0
CFI (cfiCond4) NoFunction
CFI (cfiCond4) Conditional ??CrossCallReturnLabel_2
CFI (cfiCond4) R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI (cfiCond4) VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI (cfiCond4) V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI (cfiCond4) V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI (cfiCond4) V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI (cfiCond4) V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI (cfiCond4) V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond4) V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond4) V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond4) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond4) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond4) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond4) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond4) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond4) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond4) CFA_SP SP+0
CFI (cfiCond4) CFA_XSP16 add(XSP16, 18)
CFI Block cfiPicker5 Using cfiCommon1
CFI (cfiPicker5) NoFunction
CFI (cfiPicker5) Picker
MOVX @DPTR,A
MOV DPL,R2
MOV DPH,R3
INC DPTR
CFI EndBlock cfiCond3
CFI EndBlock cfiCond4
CFI EndBlock cfiPicker5
REQUIRE ?Subroutine4
; // Fall through to label ?Subroutine4
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine4:
CFI Block cfiCond6 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_3
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 18)
CFI Block cfiCond7 Using cfiCommon0
CFI (cfiCond7) NoFunction
CFI (cfiCond7) Conditional ??CrossCallReturnLabel_4
CFI (cfiCond7) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond7) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond7) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond7) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond7) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond7) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond7) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond7) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond7) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond7) CFA_SP SP+0
CFI (cfiCond7) CFA_XSP16 add(XSP16, 9)
CFI Block cfiCond8 Using cfiCommon0
CFI (cfiCond8) NoFunction
CFI (cfiCond8) Conditional ??CrossCallReturnLabel_2
CFI (cfiCond8) R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI (cfiCond8) VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI (cfiCond8) V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI (cfiCond8) V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI (cfiCond8) V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI (cfiCond8) V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI (cfiCond8) V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond8) V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond8) V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond8) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond8) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond8) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond8) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond8) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond8) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond8) CFA_SP SP+0
CFI (cfiCond8) CFA_XSP16 add(XSP16, 18)
CFI Block cfiCond9 Using cfiCommon0
CFI (cfiCond9) NoFunction
CFI (cfiCond9) Conditional ??CrossCallReturnLabel_5
CFI (cfiCond9) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond9) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond9) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond9) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond9) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond9) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond9) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond9) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond9) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond9) CFA_SP SP+0
CFI (cfiCond9) CFA_XSP16 add(XSP16, 9)
CFI Block cfiPicker10 Using cfiCommon1
CFI (cfiPicker10) NoFunction
CFI (cfiPicker10) Picker
INC DPTR
INC DPTR
INC DPTR
INC DPTR
RET
CFI EndBlock cfiCond6
CFI EndBlock cfiCond7
CFI EndBlock cfiCond8
CFI EndBlock cfiCond9
CFI EndBlock cfiPicker10
// 145
// 146 /*********************************************************************
// 147 * @fn osalInitTasks
// 148 *
// 149 * @brief Call each of the tasks initailization functions.
// 150 *
// 151 * @param none
// 152 *
// 153 * @return none
// 154 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 155 void osalInitTasks( void )
osalInitTasks:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function osalInitTasks
// 156 {
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
// 157 // Start at the beginning
// 158 activeTask = tasksHead;
MOV DPTR,#tasksHead
SJMP ??CrossCallReturnLabel_1
// 159
// 160 // Stop at the end
// 161 while ( activeTask )
// 162 {
// 163 if ( activeTask->pfnInit )
??osalInitTasks_0:
LCALL ?Subroutine2 & 0xFFFF
??CrossCallReturnLabel_0:
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
MOV A,R4
ORL A,R5
ORL A,R6
JZ ??osalInitTasks_1
// 164 activeTask->pfnInit( activeTask->taskID );
; Setup parameters for indirect call
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -