📄 mac_scheduler.lst
字号:
\ 000028 40DC JC ??mschReserveTask_0
95 return NO_TASK;
\ 00002A 79FF MOV R1,#-0x1
\ ??mschReserveTask_2:
\ 00002C 80.. SJMP ?Subroutine0
96 } // mschReserveTask
97
98
99
100
101 //-------------------------------------------------------------------------------------------------------
102 // void mschReleaseTask(UINT8 taskNumber)
103 //
104 // DESCRIPTION:
105 // Clears the reservation for an unused task.
106 //
107 // ARGUMENTS:
108 // UINT8 taskNumber
109 // The number of the task (returned by mschReserveTask())
110 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
111 ROOT void mschReleaseTask(UINT8 taskNumber) {
\ mschReleaseTask:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
112 if (taskNumber != NO_TASK) pMacTasks[taskNumber].occupied = FALSE;
\ 000004 74FF MOV A,#-0x1
\ 000006 69 XRL A,R1
\ 000007 6011 JZ ??mschReleaseTask_0
\ 000009 E9 MOV A,R1
\ 00000A 75F00A MOV B,#0xa
\ 00000D A4 MUL AB
\ 00000E 24.. ADD A,#((pMacTasks + 6) & 0xff)
\ 000010 F582 MOV DPL,A
\ 000012 E5F0 MOV A,B
\ 000014 34.. ADDC A,#(((pMacTasks + 6) >> 8) & 0xff)
\ 000016 F583 MOV DPH,A
\ 000018 E4 CLR A
\ 000019 F0 MOVX @DPTR,A
113 } // mschReleaseTask
\ ??mschReleaseTask_0:
\ 00001A 80.. SJMP ?Subroutine0
114
115
116
117
118 //-------------------------------------------------------------------------------------------------------
119 // BOOL mschAddTask(UINT8 taskNumber, UINT8 priority, TFPTR pTaskFunc, WORD taskData, void *dataPointer)
120 //
121 // DESCRIPTION:
122 // Configures and adds a reserved to task to the desired task queue.
123 //
124 // ARGUMENTS:
125 // UINT8 taskNumber
126 // The number of the task (returned by mschReserveTask(...))
127 // UINT8 priority
128 // MAC_TASK_PRI_HIGHEST, MAC_TASK_PRI_HIGH, MAC_TASK_PRI_MEDIUM or MAC_TASK_PRI_LOW
129 // TFPTR pTaskFunc
130 // A pointer to the task function (void TaskFunction(MAC_TASK_INFO *pTask))
131 // WORD taskData
132 // Two bytes of task data
133 //
134 // RETURN VALUE:
135 // BOOL
136 // The task was added (the task number was OK)
137 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
138 ROOT BOOL mschAddTask(UINT8 taskNumber, UINT8 priority, TFPTR pTaskFunc, WORD taskData) {
\ mschAddTask:
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 89.. MOV ?V0 + 0,R1
\ 000007 8A.. MOV ?V0 + 1,R2
\ 000009 740A MOV A,#0xa
\ 00000B 12.... LCALL ?XSTACK_DISP0_8
\ 00000E E0 MOVX A,@DPTR
\ 00000F F9 MOV R1,A
\ 000010 A3 INC DPTR
\ 000011 E0 MOVX A,@DPTR
\ 000012 FA MOV R2,A
\ 000013 A3 INC DPTR
\ 000014 E0 MOVX A,@DPTR
\ 000015 FB MOV R3,A
139 MAC_TASK_INFO *pTask;
140 MAC_TASK_QUEUE *pQueue;
141
142 // The task index must be valid
143 if (taskNumber == NO_TASK) return FALSE;
\ 000016 74FF MOV A,#-0x1
\ 000018 65.. XRL A,?V0 + 0
\ 00001A 7005 JNZ ??mschAddTask_0
\ 00001C 7900 MOV R1,#0x0
\ 00001E 02.... LJMP ??mschAddTask_1
144
145 DISABLE_GLOBAL_INT();
\ ??mschAddTask_0:
\ 000021 C2AF CLR 0xa8.7
146
147 // Initialize the task
148 pTask = &pMacTasks[taskNumber];
\ 000023 E5.. MOV A,?V0 + 0
\ 000025 75F00A MOV B,#0xa
\ 000028 A4 MUL AB
\ 000029 24.. ADD A,#(pMacTasks & 0xff)
\ 00002B FE MOV R6,A
\ 00002C E5F0 MOV A,B
\ 00002E 34.. ADDC A,#((pMacTasks >> 8) & 0xff)
\ 000030 FF MOV R7,A
149 pTask->pTaskFunc = pTaskFunc;
\ 000031 8E82 MOV DPL,R6
\ 000033 8F83 MOV DPH,R7
\ 000035 E9 MOV A,R1
\ 000036 F0 MOVX @DPTR,A
\ 000037 A3 INC DPTR
\ 000038 EA MOV A,R2
\ 000039 F0 MOVX @DPTR,A
\ 00003A A3 INC DPTR
\ 00003B EB MOV A,R3
\ 00003C F0 MOVX @DPTR,A
150 pTask->taskData = taskData;
\ 00003D 8E82 MOV DPL,R6
\ 00003F 8F83 MOV DPH,R7
\ 000041 A3 INC DPTR
\ 000042 A3 INC DPTR
\ 000043 A3 INC DPTR
\ 000044 EC MOV A,R4
\ 000045 F0 MOVX @DPTR,A
\ 000046 A3 INC DPTR
\ 000047 ED MOV A,R5
\ 000048 F0 MOVX @DPTR,A
151 pTask->state = 0;
\ 000049 E4 CLR A
\ 00004A 8E82 MOV DPL,R6
\ 00004C 8F83 MOV DPH,R7
\ 00004E A3 INC DPTR
\ 00004F A3 INC DPTR
\ 000050 A3 INC DPTR
\ 000051 A3 INC DPTR
\ 000052 A3 INC DPTR
\ 000053 F0 MOVX @DPTR,A
152 pTask->priority = priority;
\ 000054 8E82 MOV DPL,R6
\ 000056 8F83 MOV DPH,R7
\ 000058 A3 INC DPTR
\ 000059 A3 INC DPTR
\ 00005A A3 INC DPTR
\ 00005B A3 INC DPTR
\ 00005C A3 INC DPTR
\ 00005D A3 INC DPTR
\ 00005E A3 INC DPTR
\ 00005F A3 INC DPTR
\ 000060 E5.. MOV A,?V0 + 1
\ 000062 F0 MOVX @DPTR,A
153 pTask->nextTask = NO_TASK;
\ 000063 74FF MOV A,#-0x1
\ 000065 8E82 MOV DPL,R6
\ 000067 8F83 MOV DPH,R7
\ 000069 A3 INC DPTR
\ 00006A A3 INC DPTR
\ 00006B A3 INC DPTR
\ 00006C A3 INC DPTR
\ 00006D A3 INC DPTR
\ 00006E A3 INC DPTR
\ 00006F A3 INC DPTR
\ 000070 F0 MOVX @DPTR,A
154
155 // Update the queue pointers at the insertion point (last task in the queue)
156 pQueue = &pMacTaskQueues[priority];
\ 000071 E5.. MOV A,?V0 + 1
\ 000073 75F003 MOV B,#0x3
\ 000076 A4 MUL AB
\ 000077 24.. ADD A,#(pMacTaskQueues & 0xff)
\ 000079 F582 MOV DPL,A
\ 00007B E5F0 MOV A,B
\ 00007D 34.. ADDC A,#((pMacTaskQueues >> 8) & 0xff)
\ 00007F F583 MOV DPH,A
157 if (pQueue->firstTask == NO_TASK) {
\ 000081 E0 MOVX A,@DPTR
\ 000082 64FF XRL A,#0xff
\ 000084 7006 JNZ ??mschAddTask_2
158 pQueue->firstTask = taskNumber;
\ 000086 E5.. MOV A,?V0 + 0
\ 000088 F0 MOVX @DPTR,A
159 pQueue->lastTask = taskNumber;
\ 000089 A3 INC DPTR
\ 00008A 801B SJMP ??mschAddTask_3
160 } else {
161 pMacTasks[pQueue->lastTask].nextTask = taskNumber;
\ ??mschAddTask_2:
\ 00008C A3 INC DPTR
\ 00008D A882 MOV R0,DPL
\ 00008F A983 MOV R1,DPH
\ 000091 E0 MOVX A,@DPTR
\ 000092 75F00A MOV B,#0xa
\ 000095 A4 MUL AB
\ 000096 24.. ADD A,#((pMacTasks + 7) & 0xff)
\ 000098 F582 MOV DPL,A
\ 00009A E5F0 MOV A,B
\ 00009C 34.. ADDC A,#(((pMacTasks + 7) >> 8) & 0xff)
\ 00009E F583 MOV DPH,A
\ 0000A0 E5.. MOV A,?V0 + 0
\ 0000A2 F0 MOVX @DPTR,A
162 pQueue->lastTask = taskNumber;
\ 0000A3 8882 MOV DPL,R0
\ 0000A5 8983 MOV DPH,R1
\ ??mschAddTask_3:
\ 0000A7 F0 MOVX @DPTR,A
163 }
164 ENABLE_GLOBAL_INT();
\ 0000A8 D2AF SETB 0xa8.7
165 return TRUE;
\ 0000AA 7901 MOV R1,#0x1
\ ??mschAddTask_1:
\ 0000AC REQUIRE ?Subroutine1
\ 0000AC ; // Fall through to label ?Subroutine1
166
167 } // mschAddTask
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 7F03 MOV R7,#0x3
\ 000002 02.... LJMP ?FUNC_LEAVE_XDATA
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 //-------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -