📄 mac_scheduler.s51
字号:
MOV DPH,A
MOV A,?V0 + 0
MOVX @DPTR,A
// 162 pQueue->lastTask = taskNumber;
MOV DPL,R0
MOV DPH,R1
??mschAddTask_3:
MOVX @DPTR,A
// 163 }
// 164 ENABLE_GLOBAL_INT();
SETB 0xa8.7
// 165 return TRUE;
MOV R1,#0x1
CFI EndBlock cfiBlock4
??mschAddTask_1:
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
// 166
// 167 } // mschAddTask
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock5 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV R7,#0x3
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock5
// 168
// 169
// 170
// 171
// 172 //-------------------------------------------------------------------------------------------------------
// 173 // void mschRemoveTask(UINT8 priority, BYTE flags)
// 174 //
// 175 // DESCRIPTION:
// 176 // Removes the active task from the specified task queue. This function is usually run from the task
// 177 // function when it's about to finished, or before it makes a call to the higher layer.
// 178 //
// 179 // ARGUMENTS:
// 180 // UINT8 priority
// 181 // The priority of the task to be removed
// 182 // BYTE flags
// 183 // MSCH_KEEP_TASK_RESERVED_BM: The task is not released back to the task pool
// 184 // MSCH_KEEP_TASK_IN_PROGRESS_BM: Does not allow other tasks of the same priority to run before
// 185 // the current task has finished (even if it is removed from the queue).
// 186 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 187 ROOT void mschRemoveTask(UINT8 priority, BYTE flags) {
mschRemoveTask:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function mschRemoveTask
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
MOV A,R2
MOV R4,A
// 188 UINT8 taskNumber;
// 189 MAC_TASK_INFO *pTask;
// 190 MAC_TASK_QUEUE *pQueue = &pMacTaskQueues[priority];
MOV A,R1
MOV B,#0x3
MUL AB
ADD A,#(pMacTaskQueues & 0xff)
MOV R0,A
MOV A,B
ADDC A,#((pMacTaskQueues >> 8) & 0xff)
MOV R1,A
// 191
// 192 DISABLE_GLOBAL_INT();
CLR 0xa8.7
// 193
// 194 // Get the task table index number, and make sure that it is valid
// 195 taskNumber = pQueue->firstTask;
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
MOV R6,A
// 196
// 197 // Flag-dependent operations
// 198 pTask = &pMacTasks[taskNumber];
MOV B,#0xa
MUL AB
ADD A,#(pMacTasks & 0xff)
MOV R2,A
MOV A,B
ADDC A,#((pMacTasks >> 8) & 0xff)
MOV R3,A
// 199 if (!(flags & MSCH_KEEP_TASK_RESERVED_BM)) pTask->occupied = FALSE;
MOV A,R4
MOV C,0xE0 /* A */.0
JC ??mschRemoveTask_0
CLR A
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
// 200 if (!(flags & MSCH_KEEP_TASK_IN_PROGRESS_BM)) pQueue->taskInProgress = FALSE;
??mschRemoveTask_0:
MOV A,R4
MOV C,0xE0 /* A */.1
JC ??mschRemoveTask_1
CLR A
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
MOVX @DPTR,A
// 201
// 202 // Move the "first task" pointer one step forward
// 203 pQueue->firstTask = pTask->nextTask;
??mschRemoveTask_1:
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV DPL,R0
MOV DPH,R1
MOVX @DPTR,A
// 204 if (pQueue->firstTask == NO_TASK) {
INC DPTR
MOV A,#-0x1
XRL A,R2
JNZ ??mschRemoveTask_2
// 205 pQueue->lastTask = NO_TASK;
??mschRemoveTask_3:
MOV A,#-0x1
MOVX @DPTR,A
SJMP ??mschRemoveTask_4
// 206 } else if (pQueue->lastTask == taskNumber) {
??mschRemoveTask_2:
MOVX A,@DPTR
XRL A,R6
JZ ??mschRemoveTask_3
// 207 pQueue->lastTask = NO_TASK;
// 208 }
// 209
// 210 ENABLE_GLOBAL_INT();
??mschRemoveTask_4:
SETB 0xa8.7
// 211 } // mschRemoveTask
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock6
// 212
// 213
// 214
// 215
// 216 //-------------------------------------------------------------------------------------------------------
// 217 // void mschRescheduleTask(MAC_TASK_INFO *pTask, UINT8 state)
// 218 //
// 219 // DESCRIPTION:
// 220 // Removes the currently running task from a queue, and adds it to the back of the same queue,
// 221 // possibly behind a number of waiting tasks which now will be run first.
// 222 //
// 223 // ARGUMENTS:
// 224 // MAC_TASK_INFO *pTask
// 225 // The task to be rescheduled
// 226 // UINT8 state
// 227 // The task state when run after the rescheduling.
// 228 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 229 ROOT void mschRescheduleTask(MAC_TASK_INFO *pTask, UINT8 state) {
mschRescheduleTask:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function mschRescheduleTask
FUNCALL mschRescheduleTask, mschRemoveTask
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL mschRescheduleTask, mschAddTask
LOCFRAME XSTACK, 13, STACK
ARGFRAME XSTACK, 13, STACK
MOV A,#-0xa
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV ?V0 + 2,R1
// 230 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
MOV A,R6
ADD A,#0x8
MOV ?V0 + 0,A
MOV A,R7
ADDC A,#0x0
MOV ?V0 + 1,A
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x3
MOV DPL,?V0 + 0
MOV DPH,A
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask
// 231 mschAddTask(pTask->taskNumber, pTask->priority, pTask->pTaskFunc, pTask->taskData);
; Setup parameters for call to function mschAddTask
MOV DPL,R6
MOV DPH,R7
LCALL ?PUSH_XSTACK8_X_THREE
CFI CFA_XSP16 add(XSP16, 13)
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPL,?V0 + 0
MOV DPH,?V0 + 1
MOVX A,@DPTR
MOV R2,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschAddTask
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
// 232 pTask->state = state;
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOV A,?V0 + 2
MOVX @DPTR,A
// 233 } // mschRescheduleTask
LJMP ?Subroutine1
CFI EndBlock cfiBlock7
ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
DS 1
END
// 234
//
// 537 bytes in segment NEAR_CODE
// 212 bytes in segment PM0_XDATA
// 1 byte in segment SFR_AN
//
// 537 bytes of CODE memory
// 0 bytes of DATA memory (+ 1 byte shared)
// 212 bytes of XDATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -