os_task.txt

来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 1,089 行 · 第 1/4 页

TXT
1,089
字号
000400  e5d4102f          LDRB     r1,[r4,#0x2f]         ;397
000404  e5d43030          LDRB     r3,[r4,#0x30]         ;397
000408  e0811000          ADD      r1,r1,r0              ;397
00040c  e5d12008          LDRB     r2,[r1,#8]            ;397
000410  e1d22003          BICS     r2,r2,r3              ;397
000414  e5c12008          STRB     r2,[r1,#8]            ;397
000418  1a000003          BNE      |L1.1068|
00041c  e5d01001          LDRB     r1,[r0,#1]            ;398
000420  e5d42031          LDRB     r2,[r4,#0x31]         ;398
000424  e1c11002          BIC      r1,r1,r2              ;398
000428  e5c01001          STRB     r1,[r0,#1]            ;398
                  |L1.1068|
00042c  e5940024          LDR      r0,[r4,#0x24]         ;403
000430  e3500000          CMP      r0,#0                 ;404
000434  0a000000          BEQ      |L1.1084|
000438  ebfffffe          BL       OS_FlagUnlink
                  |L1.1084|
00043c  e3a08000          MOV      r8,#0                 ;408
000440  e1c482ba          STRH     r8,[r4,#0x2a]         ;408
000444  e5c4802c          STRB     r8,[r4,#0x2c]         ;409
000448  e59f7418          LDR      r7,|L1.2152|
00044c  e5d70000          LDRB     r0,[r7,#0]            ;410  ; OSLockNesting
000450  e35000ff          CMP      r0,#0xff              ;410
000454  2a000001          BCS      |L1.1120|
000458  e2800001          ADD      r0,r0,#1              ;411
00045c  e5c70000          STRB     r0,[r7,#0]            ;411  ; OSLockNesting
                  |L1.1120|
000460  ef000003          SVC      #0x3                  ;413
000464  ebfffffe          BL       OS_Dummy
000468  ef000002          SVC      #0x2                  ;415
00046c  e5d70000          LDRB     r0,[r7,#0]            ;416  ; OSLockNesting
000470  e3500000          CMP      r0,#0                 ;416
000474  0a000001          BEQ      |L1.1152|
000478  e2400001          SUB      r0,r0,#1              ;417
00047c  e5c70000          STRB     r0,[r7,#0]            ;417  ; OSLockNesting
                  |L1.1152|
000480  e1a00004          MOV      r0,r4                 ;419
000484  ebfffffe          BL       OSTaskDelHook
000488  e59f13cc          LDR      r1,|L1.2140|
00048c  e5d10000          LDRB     r0,[r1,#0]            ;420  ; OSTaskCtr
000490  e2400001          SUB      r0,r0,#1              ;420
000494  e5c10000          STRB     r0,[r1,#0]            ;420  ; OSTaskCtr
000498  e7868105          STR      r8,[r6,r5,LSL #2]     ;421
00049c  e5940018          LDR      r0,[r4,#0x18]         ;422
0004a0  e3500000          CMP      r0,#0                 ;422
0004a4  1a000005          BNE      |L1.1216|
0004a8  e5940014          LDR      r0,[r4,#0x14]         ;423
0004ac  e5808018          STR      r8,[r0,#0x18]         ;423
0004b0  e59f13b4          LDR      r1,|L1.2156|
0004b4  e5940014          LDR      r0,[r4,#0x14]         ;424
0004b8  e5810000          STR      r0,[r1,#0]            ;424  ; OSTCBList
0004bc  ea000004          B        |L1.1236|
                  |L1.1216|
0004c0  e5941014          LDR      r1,[r4,#0x14]         ;426
0004c4  e5801014          STR      r1,[r0,#0x14]         ;426
0004c8  e5940018          LDR      r0,[r4,#0x18]         ;427
0004cc  e5941014          LDR      r1,[r4,#0x14]         ;427
0004d0  e5810018          STR      r0,[r1,#0x18]         ;427
                  |L1.1236|
0004d4  e59f0394          LDR      r0,|L1.2160|
0004d8  e5901000          LDR      r1,[r0,#0]            ;429  ; OSTCBFreeList
0004dc  e5841014          STR      r1,[r4,#0x14]         ;429
0004e0  e5804000          STR      r4,[r0,#0]            ;430  ; OSTCBFreeList
0004e4  ef000003          SVC      #0x3                  ;431
0004e8  ebfffffe          BL       OS_Sched
0004ec  e3a00000          MOV      r0,#0                 ;433
0004f0  eaffff9e          B        |L1.880|
                  |L1.1268|
0004f4  ef000003          SVC      #0x3                  ;435
0004f8  e3a0003c          MOV      r0,#0x3c              ;436
0004fc  eaffff9b          B        |L1.880|
;;;438    #endif
                          ENDP

                  OSTaskDelReq PROC
;;;486    INT8U  OSTaskDelReq (INT8U prio)
;;;487    {
000500  e92d4010          PUSH     {r4,lr}
000504  e1a04000          MOV      r4,r0
;;;488    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;489        OS_CPU_SR  cpu_sr;
;;;490    #endif
;;;491        BOOLEAN    stat;
;;;492        INT8U      err;
;;;493        OS_TCB    *ptcb;
;;;494    
;;;495    
;;;496    #if OS_ARG_CHK_EN > 0
;;;497        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to delete idle task     */
000508  e354000c          CMP      r4,#0xc
00050c  1a000002          BNE      |L1.1308|
;;;498            return (OS_TASK_DEL_IDLE);
000510  e3a0003d          MOV      r0,#0x3d
                  |L1.1300|
000514  e8bd4010          POP      {r4,lr}
;;;499        }
;;;500        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;501            return (OS_PRIO_INVALID);
;;;502        }
;;;503    #endif
;;;504        if (prio == OS_PRIO_SELF) {                                 /* See if a task is requesting to ...  */
;;;505            OS_ENTER_CRITICAL();                                    /* ... this task to delete itself      */
;;;506            stat = OSTCBCur->OSTCBDelReq;                           /* Return request status to caller     */
;;;507            OS_EXIT_CRITICAL();
;;;508            return (stat);
;;;509        }
;;;510        OS_ENTER_CRITICAL();
;;;511        ptcb = OSTCBPrioTbl[prio];
;;;512        if (ptcb != (OS_TCB *)0) {                                  /* Task to delete must exist           */
;;;513            ptcb->OSTCBDelReq = OS_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
;;;514            err               = OS_NO_ERR;
;;;515        } else {
;;;516            err               = OS_TASK_NOT_EXIST;                  /* Task must be deleted                */
;;;517        }
;;;518        OS_EXIT_CRITICAL();
;;;519        return (err);
;;;520    }
000518  e12fff1e          BX       lr
                  |L1.1308|
00051c  3a000003          BCC      |L1.1328|
000520  e35400ff          CMP      r4,#0xff              ;500
000524  0a000001          BEQ      |L1.1328|
000528  e3a0002a          MOV      r0,#0x2a              ;501
00052c  eafffff8          B        |L1.1300|
                  |L1.1328|
000530  e35400ff          CMP      r4,#0xff              ;504
000534  1a000006          BNE      |L1.1364|
000538  ef000002          SVC      #0x2                  ;505
00053c  e59f030c          LDR      r0,|L1.2128|
000540  e5900000          LDR      r0,[r0,#0]            ;506  ; OSTCBCur
000544  e5d04032          LDRB     r4,[r0,#0x32]         ;506
000548  ef000003          SVC      #0x3                  ;507
00054c  e1a00004          MOV      r0,r4                 ;508
000550  eaffffef          B        |L1.1300|
                  |L1.1364|
000554  ef000002          SVC      #0x2                  ;510
000558  e59f02e8          LDR      r0,|L1.2120|
00055c  e7900104          LDR      r0,[r0,r4,LSL #2]     ;511
000560  e3500000          CMP      r0,#0                 ;512
000564  0a000003          BEQ      |L1.1400|
000568  e3a0103e          MOV      r1,#0x3e              ;513
00056c  e5c01032          STRB     r1,[r0,#0x32]         ;513
000570  e3a04000          MOV      r4,#0                 ;514
000574  ea000000          B        |L1.1404|
                  |L1.1400|
000578  e3a0400b          MOV      r4,#0xb               ;516
                  |L1.1404|
00057c  ef000003          SVC      #0x3                  ;518
000580  e1a00004          MOV      r0,r4                 ;519
000584  eaffffe2          B        |L1.1300|
;;;521    #endif
                          ENDP

                  OSTaskResume PROC
;;;541    INT8U  OSTaskResume (INT8U prio)
;;;542    {
000588  e92d4010          PUSH     {r4,lr}
00058c  e1a04000          MOV      r4,r0
;;;543    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;544        OS_CPU_SR  cpu_sr;
;;;545    #endif
;;;546        OS_TCB    *ptcb;
;;;547    
;;;548    
;;;549    #if OS_ARG_CHK_EN > 0
;;;550        if (prio >= OS_LOWEST_PRIO) {                               /* Make sure task priority is valid    */
000590  e354000c          CMP      r4,#0xc
000594  3a000002          BCC      |L1.1444|
;;;551            return (OS_PRIO_INVALID);
000598  e3a0002a          MOV      r0,#0x2a
                  |L1.1436|
00059c  e8bd4010          POP      {r4,lr}
;;;552        }
;;;553    #endif
;;;554        OS_ENTER_CRITICAL();
;;;555        ptcb = OSTCBPrioTbl[prio];
;;;556        if (ptcb == (OS_TCB *)0) {                                  /* Task to suspend must exist          */
;;;557            OS_EXIT_CRITICAL();
;;;558            return (OS_TASK_RESUME_PRIO);
;;;559        }
;;;560        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) {              /* Task must be suspended   */
;;;561            if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) &&      /* Remove suspension        */
;;;562                 (ptcb->OSTCBDly  == 0)) {                                     /* Must not be delayed      */
;;;563                OSRdyGrp               |= ptcb->OSTCBBitY;                     /* Make task ready to run   */
;;;564                OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;565                OS_EXIT_CRITICAL();
;;;566                OS_Sched();
;;;567            } else {
;;;568                OS_EXIT_CRITICAL();
;;;569            }
;;;570            return (OS_NO_ERR);
;;;571        }
;;;572        OS_EXIT_CRITICAL();
;;;573        return (OS_TASK_NOT_SUSPENDED);
;;;574    }
0005a0  e12fff1e          BX       lr
                  |L1.1444|
0005a4  ef000002          SVC      #0x2                  ;554
0005a8  e59f0298          LDR      r0,|L1.2120|
0005ac  e7900104          LDR      r0,[r0,r4,LSL #2]     ;555
0005b0  e3500000          CMP      r0,#0                 ;556
0005b4  1a000002          BNE      |L1.1476|
0005b8  ef000003          SVC      #0x3                  ;557
0005bc  e3a00064          MOV      r0,#0x64              ;558
0005c0  eafffff5          B        |L1.1436|
                  |L1.1476|
0005c4  e5d0102c          LDRB     r1,[r0,#0x2c]         ;560
0005c8  e3110008          TST      r1,#8                 ;560
0005cc  0a000016          BEQ      |L1.1580|
0005d0  e3d11008          BICS     r1,r1,#8              ;561
0005d4  e5c0102c          STRB     r1,[r0,#0x2c]         ;561
0005d8  1a000010          BNE      |L1.1568|
0005dc  e1d012ba          LDRH     r1,[r0,#0x2a]         ;562
0005e0  e3510000          CMP      r1,#0                 ;562
0005e4  1a00000d          BNE      |L1.1568|
0005e8  e59f1268          LDR      r1,|L1.2136|
0005ec  e5d02031          LDRB     r2,[r0,#0x31]         ;563
0005f0  e5d13000          LDRB     r3,[r1,#0]            ;563  ; OSRdyGrp
0005f4  e1822003          ORR      r2,r2,r3              ;563
0005f8  e5c12000          STRB     r2,[r1,#0]            ;563  ; OSRdyGrp
0005fc  e5d0102f          LDRB     r1,[r0,#0x2f]         ;564
000600  e59f224c          LDR      r2,|L1.2132|
000604  e5d00030          LDRB     r0,[r0,#0x30]         ;564
000608  e7d23001          LDRB     r3,[r2,r1]            ;564
00060c  e1800003          ORR      r0,r0,r3              ;564
000610  e7c20001          STRB     r0,[r2,r1]            ;564
000614  ef000003          SVC      #0x3                  ;565
000618  ebfffffe          BL       OS_Sched
00061c  ea000000          B        |L1.1572|
                  |L1.1568|
000620  ef000003          SVC      #0x3                  ;568
                  |L1.1572|
000624  e3a00000          MOV      r0,#0                 ;570
000628  eaffffdb          B        |L1.1436|
                  |L1.1580|
00062c  ef000003          SVC      #0x3                  ;572
000630  e3a00065          MOV      r0,#0x65              ;573
000634  eaffffd8          B        |L1.1436|
;;;575    #endif
                          ENDP

                  OSTaskStkChk PROC
;;;596    INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)
;;;597    {
000638  e92d41f0          PUSH     {r4-r8,lr}
00063c  e1a04000          MOV      r4,r0
000640  e1a06001          MOV      r6,r1
;;;598    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;599        OS_CPU_SR  cpu_sr;
;;;600    #endif
;;;601        OS_TCB    *ptcb;
;;;602        OS_STK    *pchk;
;;;603        INT32U     free;
;;;604        INT32U     size;
;;;605    
;;;606    
;;;607    #if OS_ARG_CHK_EN > 0
;;;608        if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {        /* Make sure task priority is valid    */
000644  e354000c          CMP      r4,#0xc
000648  9a000004          BLS      |L1.1632|
00064c  e35400ff          CMP      r4,#0xff
000650  0a000002          BEQ      |L1.1632|
;;;609            return (OS_PRIO_INVALID);
000654  e3a0002a          MOV      r0,#0x2a
                  |L1.1624|
000658  e8bd41f0          POP      {r4-r8,lr}
;;;610        }
;;;611    #endif
;;;612        pdata->OSFree = 0;                                          /* Assume failure, set to 0 size       */
;;;613        pdata->OSUsed = 0;
;;;614        OS_ENTER_CRITICAL();
;;;615        if (prio == OS_PRIO_SELF) {                        /* See if check for SELF                        */
;;;616            prio = OSTCBCur->OSTCBPrio;

⌨️ 快捷键说明

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