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

📄 os_task.ls1

📁 uCOS-II_2.52在51上的移植程序
💻 LS1
📖 第 1 页 / 共 3 页
字号:
                     190     ;             }
                     191     ;             OSTCBPrioTbl[newprio] = ptcb;                       /* Place pointer to TCB @
                              new priority */
                     192     ;             ptcb->OSTCBPrio       = newprio;                    /* Set new task priority 
                                           */
                     193     ;             ptcb->OSTCBY          = y;
                     194     ;             ptcb->OSTCBX          = x;
                     195     ;             ptcb->OSTCBBitY       = bity;
                     196     ;             ptcb->OSTCBBitX       = bitx;
                     197     ;             OS_EXIT_CRITICAL();
                     198     ;             OS_Sched();                                         /* Run highest priority t
                             ask ready     */
                     199     ;             return (OS_NO_ERR);
                     200     ;         } else {
                     201     ;             OSTCBPrioTbl[newprio] = (OS_TCB *)0;                /* Release the reserved p
                             rio.          */
                     202     ;             OS_EXIT_CRITICAL();
                     203     ;             return (OS_PRIO_ERR);                               /* Task to change didn't 
                             exist         */
                     204     ;         }
                     205     ;     }
                     206     ; }
                     207     ; #endif
                     208     ; /*$PAGE*/
                     209     ; /*
                     210     ; *****************************************************************************************
                             ****************
                     211     ; *                                            CREATE A TASK
                     212     ; *
                     213     ; * Description: This function is used to have uC/OS-II manage the execution of a task.  Ta
                             sks can either
                     214     ; *              be created prior to the start of multitasking or by a running task.  A tas
                             k cannot be
                     215     ; *              created by an ISR.
                     216     ; *
                     217     ; * Arguments  : task     is a pointer to the task's code
                     218     ; *
                     219     ; *              pdata    is a pointer to an optional data area which can be used to pass p
                             arameters to
                     220     ; *                       the task when the task first executes.  Where the task is concern
                             ed it thinks
                     221     ; *                       it was invoked and passed the argument 'pdata' as follows:
                     222     ; *
                     223     ; *                           void Task (void *pdata)
                     224     ; *                           {
                     225     ; *                               for (;;) {
                     226     ; *                                   Task code;
                     227     ; *                               }
A51 MACRO ASSEMBLER  OS_TASK                                                              08/08/2005 11:36:56 PAGE     5

                     228     ; *                           }
                     229     ; *
                     230     ; *              ptos     is a pointer to the task's top of stack.  If the configuration co
                             nstant
                     231     ; *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward 
                             (i.e. from high
                     232     ; *                       memory to low memory).  'pstk' will thus point to the highest (va
                             lid) memory
                     233     ; *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will
                              point to the
                     234     ; *                       lowest memory location of the stack and the stack will grow with 
                             increasing
                     235     ; *                       memory locations.
                     236     ; *
                     237     ; *              prio     is the task's priority.  A unique priority MUST be assigned to ea
                             ch task and the
                     238     ; *                       lower the number, the higher the priority.
                     239     ; *
                     240     ; * Returns    : OS_NO_ERR        if the function was successful.
                     241     ; *              OS_PRIO_EXIT     if the task priority already exist
                     242     ; *                               (each task MUST have a unique priority).
                     243     ; *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum al
                             lowed
                     244     ; *                               (i.e. >= OS_LOWEST_PRIO)
                     245     ; *****************************************************************************************
                             ****************
                     246     ; */
                     247     ; 
                     248     ; #if OS_TASK_CREATE_EN > 0
                     249     ; INT8U  OSTaskCreate (void (*task)(void *pd), void *ppdata, OS_STK *ptos, INT8U prio)
                     250     
----                 251             RSEG  ?PR?_OSTaskCreate?OS_TASK
0000                 252     _OSTaskCreate:
                     253             USING   0
                     254                             ; SOURCE LINE # 156
0000 900000   F      255             MOV     DPTR,#task?040
0003 EB              256             MOV     A,R3
0004 F0              257             MOVX    @DPTR,A
0005 A3              258             INC     DPTR
0006 EA              259             MOV     A,R2
0007 F0              260             MOVX    @DPTR,A
0008 A3              261             INC     DPTR
0009 E9              262             MOV     A,R1
000A F0              263             MOVX    @DPTR,A
                     264     ; {
                     265                             ; SOURCE LINE # 157
                     266     ; 
                     267     ;     OS_STK    *psp;
                     268     ;     INT8U      err;
                     269     ; 
                     270     ; 
                     271     ; #if OS_ARG_CHK_EN > 0
                     272     ;     if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable ra
                             nge           */
                     273     ;         return (OS_PRIO_INVALID);
                     274     ;     }
                     275     ; #endif
                     276     ;     OS_ENTER_CRITICAL();
                     277                             ; SOURCE LINE # 168
000B C2AF            278             CLR     EA
                     279     ;     if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at t
                             his priority  */
                     280                             ; SOURCE LINE # 169
000D 900000   F      281             MOV     DPTR,#prio?043
0010 E0              282             MOVX    A,@DPTR
0011 FF              283             MOV     R7,A
A51 MACRO ASSEMBLER  OS_TASK                                                              08/08/2005 11:36:56 PAGE     6

0012 75F003          284             MOV     B,#03H
0015 A4              285             MUL     AB
0016 2400     F      286             ADD     A,#LOW (OSTCBPrioTbl)
0018 F582            287             MOV     DPL,A
001A E4              288             CLR     A
001B 3400     F      289             ADDC    A,#HIGH (OSTCBPrioTbl)
001D F583            290             MOV     DPH,A
001F E0              291             MOVX    A,@DPTR
0020 FB              292             MOV     R3,A
0021 A3              293             INC     DPTR
0022 E0              294             MOVX    A,@DPTR
0023 FA              295             MOV     R2,A
0024 A3              296             INC     DPTR
0025 E0              297             MOVX    A,@DPTR
0026 4A              298             ORL     A,R2
0027 4B              299             ORL     A,R3
0028 6003            300             JZ      $ + 5H
002A 020000   F      301             LJMP    ?C0001
                     302     ;         OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others fr
                             om doing ...  */
                     303                             ; SOURCE LINE # 170
002D 7901            304             MOV     R1,#01H
002F EF              305             MOV     A,R7
0030 75F003          306             MOV     B,#03H
0033 A4              307             MUL     AB
0034 2400     F      308             ADD     A,#LOW (OSTCBPrioTbl)
0036 F582            309             MOV     DPL,A
0038 E4              310             CLR     A
0039 3400     F      311             ADDC    A,#HIGH (OSTCBPrioTbl)
003B F583            312             MOV     DPH,A
003D E4              313             CLR     A
003E F0              314             MOVX    @DPTR,A
003F A3              315             INC     DPTR
0040 F0              316             MOVX    @DPTR,A
0041 A3              317             INC     DPTR
0042 04              318             INC     A
0043 F0              319             MOVX    @DPTR,A
                     320     ;                                              /* ... the same thing until task is created.
                                           */
                     321     ;         OS_EXIT_CRITICAL();
                     322                             ; SOURCE LINE # 172
0044 D2AF            323             SETB    EA
                     324     ;         psp = (OS_STK *)OSTaskStkInit(task, ppdata, ptos, 0);    /* Initialize the task's
                              stack         */
                     325                             ; SOURCE LINE # 173
0046 90FFFE          326             MOV     DPTR,#0FFFEH
0049 120000   F      327             LCALL   ?C?ADDXBP
004C E4              328             CLR     A
004D F0              329             MOVX    @DPTR,A
004E A3              330             INC     DPTR
004F F0              331             MOVX    @DPTR,A
0050 900000   F      332             MOV     DPTR,#ptos?042
0053 E0              333             MOVX    A,@DPTR
0054 FB              334             MOV     R3,A
0055 A3              335             INC     DPTR
0056 E0              336             MOVX    A,@DPTR
0057 FA              337             MOV     R2,A
0058 A3              338             INC     DPTR
0059 E0              339             MOVX    A,@DPTR
005A F9              340             MOV     R1,A
005B 90FFFD          341             MOV     DPTR,#0FFFDH
005E 120000   F      342             LCALL   ?C?ADDXBP
0061 EB              343             MOV     A,R3
0062 F0              344             MOVX    @DPTR,A
0063 A3              345             INC     DPTR
0064 EA              346             MOV     A,R2
A51 MACRO ASSEMBLER  OS_TASK                                                              08/08/2005 11:36:56 PAGE     7

0065 F0              347             MOVX    @DPTR,A
0066 A3              348             INC     DPTR
0067 E9              349             MOV     A,R1
0068 F0              350             MOVX    @DPTR,A
0069 900000   F      351             MOV     DPTR,#ppdata?041
006C E0              352             MOVX    A,@DPTR
006D FB              353             MOV     R3,A
006E A3              354             INC     DPTR
006F E0              355             MOVX    A,@DPTR
0070 FA              356             MOV     R2,A
0071 A3              357             INC     DPTR
0072 E0              358             MOVX    A,@DPTR
0073 F9              359             MOV     R1,A
0074 90FFFD          360             MOV     DPTR,#0FFFDH
0077 120000   F      361             LCALL   ?C?ADDXBP
007A EB              362             MOV     A,R3
007B F0              363             MOVX    @DPTR,A
007C A3              364             INC     DPTR
007D EA              365             MOV     A,R2
007E F0              366             MOVX    @DPTR,A
007F A3              367             INC     DPTR
0080 E9              368             MOV     A,R1
0081 F0              369             MOVX    @DPTR,A
0082 900000   F      370             MOV     DPTR,#task?040
0085 E0              371             MOVX    A,@DPTR
0086 FB              372             MOV     R3,A
0087 A3              373             INC     DPTR
0088 E0              374             MOVX    A,@DPTR
0089 FA              375             MOV     R2,A
008A A3              376             INC     DPTR
008B E0              377             MOVX    A,@DPTR
008C F9              378             MOV     R1,A
008D 120000   F      379             LCALL   _?OSTaskStkInit
                     380     ;---- Variable 'psp?044' assigned to Register 'R1/R2/R3' ----
                     381     ;         err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
                     382                             ; SOURCE LINE # 174
0090 900000   F      383             MOV     DPTR,#?_OS_TCBInit?BYTE+04H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -