📄 osal_tasks.lst
字号:
\ 00000D A3 INC DPTR
\ 00000E A3 INC DPTR
\ 00000F E0 MOVX A,@DPTR
\ 000010 FC MOV R4,A
\ 000011 A3 INC DPTR
\ 000012 E0 MOVX A,@DPTR
\ 000013 FD MOV R5,A
\ 000014 A3 INC DPTR
\ 000015 E0 MOVX A,@DPTR
\ 000016 FE MOV R6,A
\ 000017 EC MOV A,R4
\ 000018 4D ORL A,R5
\ 000019 4E ORL A,R6
\ 00001A 6014 JZ ??osalInitTasks_1
164 activeTask->pfnInit( activeTask->taskID );
\ 00001C ; Setup parameters for indirect call
\ 00001C 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_4:
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 E0 MOVX A,@DPTR
\ 000024 F9 MOV R1,A
\ 000025 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_5:
\ 000028 E0 MOVX A,@DPTR
\ 000029 8C82 MOV DPL,R4
\ 00002B 8D83 MOV DPH,R5
\ 00002D 12.... LCALL ?BCALL ; Banked call to: DPTR()
165
166 activeTask = activeTask->next;
\ ??osalInitTasks_1:
\ 000030 12.... LCALL ?Subroutine2 & 0xFFFF
\ ??CrossCallReturnLabel_1:
\ 000033 E0 MOVX A,@DPTR
\ 000034 F8 MOV R0,A
\ 000035 A3 INC DPTR
\ 000036 E0 MOVX A,@DPTR
\ 000037 F9 MOV R1,A
\ 000038 90.... MOV DPTR,#activeTask
\ 00003B E8 MOV A,R0
\ 00003C F0 MOVX @DPTR,A
\ 00003D A3 INC DPTR
\ 00003E E9 MOV A,R1
\ 00003F F0 MOVX @DPTR,A
167 }
\ 000040 90.... MOV DPTR,#activeTask
\ 000043 E0 MOVX A,@DPTR
\ 000044 7002 JNZ ??osalInitTasks_2
\ 000046 A3 INC DPTR
\ 000047 E0 MOVX A,@DPTR
\ ??osalInitTasks_2:
\ 000048 70C0 JNZ ??osalInitTasks_0
168
169 activeTask = (osalTaskRec_t *)NULL;
170 }
\ 00004A 7F01 MOV R7,#0x1
\ 00004C 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 90.... MOV DPTR,#activeTask
\ 000003 E0 MOVX A,@DPTR
\ 000004 F8 MOV R0,A
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 F583 MOV DPH,A
\ 000009 8882 MOV DPL,R0
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 90.... MOV DPTR,#(activeTask + 1)
\ 000003 E0 MOVX A,@DPTR
\ 000004 F583 MOV DPH,A
\ 000006 8882 MOV DPL,R0
\ 000008 80.. SJMP ?Subroutine4
171
172 /*********************************************************************
173 * @fn osalNextActiveTask
174 *
175 * @brief This function will return the next active task.
176 *
177 * NOTE: Task queue is in priority order. We can stop at the
178 * first task that is "ready" (events element non-zero)
179 *
180 * @param none
181 *
182 * @return pointer to the found task, NULL if not found
183 */
\ In segment BANKED_CODE, align 1, keep-with-next
184 osalTaskRec_t *osalNextActiveTask( void )
\ osalNextActiveTask:
185 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
186 osalTaskRec_t *srchTask;
187
188 // Start at the beginning
189 srchTask = tasksHead;
\ 000004 90.... MOV DPTR,#tasksHead
\ 000007 8004 SJMP ??osalNextActiveTask_0
190
191 // When found or not
192 while ( srchTask ) {
193 if (srchTask->events) {
194 // task is highest priority that is ready
195 return srchTask;
196 }
197 srchTask = srchTask->next;
\ ??osalNextActiveTask_1:
\ 000009 8A82 MOV DPL,R2
\ 00000B 8B83 MOV DPH,R3
\ ??osalNextActiveTask_0:
\ 00000D E0 MOVX A,@DPTR
\ 00000E FA MOV R2,A
\ 00000F A3 INC DPTR
\ 000010 E0 MOVX A,@DPTR
\ 000011 FB MOV R3,A
\ 000012 EA MOV A,R2
\ 000013 7001 JNZ ??osalNextActiveTask_2
\ 000015 EB MOV A,R3
\ ??osalNextActiveTask_2:
\ 000016 6017 JZ ??osalNextActiveTask_3
\ 000018 8A82 MOV DPL,R2
\ 00001A 8B83 MOV DPH,R3
\ 00001C A3 INC DPTR
\ 00001D A3 INC DPTR
\ 00001E A3 INC DPTR
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 A3 INC DPTR
\ 000024 A3 INC DPTR
\ 000025 A3 INC DPTR
\ 000026 E0 MOVX A,@DPTR
\ 000027 7002 JNZ ??osalNextActiveTask_4
\ 000029 A3 INC DPTR
\ 00002A E0 MOVX A,@DPTR
\ ??osalNextActiveTask_4:
\ 00002B 60DC JZ ??osalNextActiveTask_1
\ 00002D 8004 SJMP ??osalNextActiveTask_5
198 }
199 return NULL;
\ ??osalNextActiveTask_3:
\ 00002F 7A00 MOV R2,#0x0
\ 000031 7B00 MOV R3,#0x0
\ ??osalNextActiveTask_5:
\ 000033 02.... LJMP ?Subroutine3 & 0xFFFF
200 }
201
202
203 /*********************************************************************
204 * @fn osalFindTask
205 *
206 * @brief This function will return a task pointer to the task
207 * found with the passed in task ID.
208 *
209 * @param taskID - task ID to look for
210 *
211 * @return pointer to the found task, NULL if not found
212 */
\ In segment BANKED_CODE, align 1, keep-with-next
213 osalTaskRec_t *osalFindTask( byte taskID )
\ osalFindTask:
214 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
215 osalTaskRec_t *srchTask;
216
217 // Start at the beginning
218 srchTask = tasksHead;
\ 000004 90.... MOV DPTR,#tasksHead
\ 000007 8004 SJMP ??osalFindTask_0
219
220 // When found or not
221 while ( srchTask )
222 {
223 // Look for any activity
224 if ( srchTask->taskID == taskID )
225 return ( srchTask );
226
227 srchTask = srchTask->next;
\ ??osalFindTask_1:
\ 000009 8A82 MOV DPL,R2
\ 00000B 8B83 MOV DPH,R3
\ ??osalFindTask_0:
\ 00000D E0 MOVX A,@DPTR
\ 00000E FA MOV R2,A
\ 00000F A3 INC DPTR
\ 000010 E0 MOVX A,@DPTR
\ 000011 FB MOV R3,A
\ 000012 EA MOV A,R2
\ 000013 7001 JNZ ??osalFindTask_2
\ 000015 EB MOV A,R3
\ ??osalFindTask_2:
\ 000016 6012 JZ ??osalFindTask_3
\ 000018 8A82 MOV DPL,R2
\ 00001A 8B83 MOV DPH,R3
\ 00001C A3 INC DPTR
\ 00001D A3 INC DPTR
\ 00001E A3 INC DPTR
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 A3 INC DPTR
\ 000024 E0 MOVX A,@DPTR
\ 000025 69 XRL A,R1
\ 000026 70E1 JNZ ??osalFindTask_1
\ 000028 8004 SJMP ??osalFindTask_4
228 }
229
230 return ( (osalTaskRec_t *)NULL );
\ ??osalFindTask_3:
\ 00002A 7A00 MOV R2,#0x0
\ 00002C 7B00 MOV R3,#0x0
\ ??osalFindTask_4:
\ 00002E 02.... LJMP ?Subroutine3 & 0xFFFF
231 }
232
233 /*********************************************************************
234 *********************************************************************/
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
osalFindTask 2 0 0
osalInitTasks 0 0 9
osalNextActiveTask 2 0 0
osalTaskAdd 1 0 21
-> osal_mem_alloc 0 0 36
osalTaskInit 2 0 0
Segment part sizes:
Function/Label Bytes
-------------- -----
tasksHead 2
activeTask 2
taskIDs 1
osalTaskInit 21
?Subroutine3 7
osalTaskAdd 244
?Subroutine0 6
?Subroutine4 5
osalInitTasks 79
?Subroutine2 12
?Subroutine1 10
osalNextActiveTask 54
osalFindTask 49
487 bytes in segment BANKED_CODE
5 bytes in segment XDATA_Z
487 bytes of CODE memory
5 bytes of XDATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -