⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_scheduler.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 3 页
字号:
        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 + -