📄 os_task.src
字号:
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ORL A,R2
ORL A,R3
JZ $ + 5H
LJMP ?C0004
; OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others from doing ... */
; SOURCE LINE # 184
MOV R3,A
MOV R2,A
MOV R1,#01H
MOV DPTR,#0DH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV B,#03H
MUL AB
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; /* ... the same thing until task is created. */
; OS_EXIT_CRITICAL();
; SOURCE LINE # 186
SETB EA
; psp = (void *)OSTaskStkInit(task, ppdata, ptos, 0); /* Initialize the task's stack */
; SOURCE LINE # 187
MOV DPTR,#0FFFEH
LCALL ?C?ADDXBP
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL _?OSTaskStkInit
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);
; SOURCE LINE # 188
MOV DPTR,#0FFFEH
LCALL ?C?ADDXBP
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV R3,A
MOV R2,A
MOV R1,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0FFFEH
LCALL ?C?ADDXBP
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#0FFFEH
LCALL ?C?ADDXBP
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV R3,A
MOV R2,A
MOV R1,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#019H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R7,A
LCALL _?OSTCBInit
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOV A,R7
MOVX @DPTR,A
; if (err == OS_NO_ERR) {
; SOURCE LINE # 189
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOVX A,@DPTR
JNZ ?C0005
; OS_ENTER_CRITICAL();
; SOURCE LINE # 190
CLR EA
; OSTaskCtr++; /* Increment the #tasks counter */
; SOURCE LINE # 191
MOV DPTR,#OSTaskCtr
MOVX A,@DPTR
INC A
MOVX @DPTR,A
; OSTaskCreateHook(OSTCBPrioTbl[prio]); /* Call user defined hook */
; SOURCE LINE # 192
MOV DPTR,#0DH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV B,#03H
MUL AB
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL _?OSTaskCreateHook
; OS_EXIT_CRITICAL();
; SOURCE LINE # 193
SETB EA
; if (OSRunning) { /* Find highest priority task if multitasking has started */
; SOURCE LINE # 194
MOV R0,#LOW (OSRunning)
MOV A,@R0
JZ ?C0007
; OSSched();
; SOURCE LINE # 195
LCALL _?OSSched
; }
; SOURCE LINE # 196
; } else {
; SOURCE LINE # 197
SJMP ?C0007
?C0005:
; OS_ENTER_CRITICAL();
; SOURCE LINE # 198
CLR EA
; OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */
; SOURCE LINE # 199
MOV R3,#00H
MOV R2,#00H
MOV R1,#00H
MOV DPTR,#0DH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV B,#03H
MUL AB
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OS_EXIT_CRITICAL();
; SOURCE LINE # 200
SETB EA
; }
; SOURCE LINE # 201
?C0007:
; return (err);
; SOURCE LINE # 202
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R7,A
SJMP ?C0003
; } else {
; SOURCE LINE # 203
?C0004:
; OS_EXIT_CRITICAL();
; SOURCE LINE # 204
SETB EA
; return (OS_PRIO_EXIST);
; SOURCE LINE # 205
MOV R7,#028H
; }
; SOURCE LINE # 206
; }
; SOURCE LINE # 207
?C0003:
MOV DPTR,#0EH
LJMP ?C?ADDXBP
; END OF _?OSTaskCreate
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * CREATE A TASK (Extended Version)
; *
; * Description: This function is used to have uC/OS-II manage the execution of a task. Tasks can either
; * be created prior to the start of multitasking or by a running task. A task cannot be
; * created by an ISR. This function is similar to OSTaskCreate() except that it allows
; * additional information about a task to be specified.
; *
; * Arguments : task is a pointer to the task's code
; *
; * pdata is a pointer to an optional data area which can be used to pass parameters to
; * the task when the task first executes. Where the task is concerned it thinks
; * it was invoked and passed the argument 'pdata' as follows:
; *
; * void Task (void *pdata)
; * {
; * for (;;) {
; * Task code;
; * }
; * }
; *
; * ptos is a pointer to the task's top of stack. If the configuration constant
; * OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
; * memory to low memory). 'pstk' will thus point to the highest (valid) memory
; * location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the
; * lowest memory location of the stack and the stack will grow with increasing
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -