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

📄 os_core.txt

📁 uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的real view模板 uc/os在lpc210X系列的real view模板
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1344|
;;;381                OS_ENTER_CRITICAL();
000540  ef000002          SVC      #0x2
;;;382                if (ptcb->OSTCBDly != 0) {                     /* Delayed or waiting for event with TO     */
000544  e1d402ba          LDRH     r0,[r4,#0x2a]
000548  e3500000          CMP      r0,#0
00054c  0a000014          BEQ      |L1.1444|
;;;383                    if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay   */
000550  e2400001          SUB      r0,r0,#1
000554  e1a00800          LSL      r0,r0,#16
000558  e1b00820          LSRS     r0,r0,#16
00055c  e1c402ba          STRH     r0,[r4,#0x2a]
000560  1a00000f          BNE      |L1.1444|
;;;384                        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
000564  e5d4002c          LDRB     r0,[r4,#0x2c]
000568  e3100008          TST      r0,#8
00056c  1a00000a          BNE      |L1.1436|
;;;385                            OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
000570  e5d40031          LDRB     r0,[r4,#0x31]
000574  e5d51007          LDRB     r1,[r5,#7]  ; OSRdyGrp
000578  e1800001          ORR      r0,r0,r1
00057c  e5c50007          STRB     r0,[r5,#7]  ; OSRdyGrp
;;;386                            OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
000580  e5d4002f          LDRB     r0,[r4,#0x2f]
000584  e59f12fc          LDR      r1,|L1.2184|
000588  e5d43030          LDRB     r3,[r4,#0x30]
00058c  e7d12000          LDRB     r2,[r1,r0]
000590  e1822003          ORR      r2,r2,r3
000594  e7c12000          STRB     r2,[r1,r0]
000598  ea000001          B        |L1.1444|
                  |L1.1436|
;;;387                        } else {                               /* Yes, Leave 1 tick to prevent ...         */
;;;388                            ptcb->OSTCBDly = 1;                /* ... loosing the task when the ...        */
00059c  e3a00001          MOV      r0,#1
0005a0  e1c402ba          STRH     r0,[r4,#0x2a]
                  |L1.1444|
;;;389                        }                                      /* ... suspension is removed.               */
;;;390                    }
;;;391                }
;;;392                ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list            */
0005a4  e5944014          LDR      r4,[r4,#0x14]
;;;393                OS_EXIT_CRITICAL();
0005a8  ef000003          SVC      #0x3
                  |L1.1452|
0005ac  e5d4002d          LDRB     r0,[r4,#0x2d]         ;380
0005b0  e350000c          CMP      r0,#0xc               ;380
0005b4  1affffe1          BNE      |L1.1344|
                  |L1.1464|
;;;394            }
;;;395        }
;;;396    }
0005b8  e8bd4070          POP      {r4-r6,lr}
0005bc  e12fff1e          BX       lr
;;;397    /*$PAGE*/
                          ENDP

                  OSVersion PROC
;;;413    {
;;;414        return (OS_VERSION);
0005c0  e3a000fc          MOV      r0,#0xfc
;;;415    }
0005c4  e12fff1e          BX       lr
;;;416    
                          ENDP

                  OS_Dummy PROC
;;;432    {
;;;433    }
0005c8  e12fff1e          BX       lr
;;;434    #endif
                          ENDP

                  OS_EventTaskRdy PROC
;;;459    INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
;;;460    {
0005cc  e92d4070          PUSH     {r4-r6,lr}
;;;461        OS_TCB *ptcb;
;;;462        INT8U   x;
;;;463        INT8U   y;
;;;464        INT8U   bitx;
;;;465        INT8U   bity;
;;;466        INT8U   prio;
;;;467    
;;;468    
;;;469        y    = OSUnMapTbl[pevent->OSEventGrp];            /* Find highest prio. task waiting for message   */
0005d0  e5d03001          LDRB     r3,[r0,#1]
0005d4  e59fc2a8          LDR      r12,|L1.2180|
0005d8  e7dc3003          LDRB     r3,[r12,r3]
;;;470        bity = OSMapTbl[y];
0005dc  e24c4008          SUB      r4,r12,#8
0005e0  e7d4e003          LDRB     lr,[r4,r3]
;;;471        x    = OSUnMapTbl[pevent->OSEventTbl[y]];
0005e4  e0806003          ADD      r6,r0,r3
0005e8  e5d65008          LDRB     r5,[r6,#8]
0005ec  e7dcc005          LDRB     r12,[r12,r5]
;;;472        bitx = OSMapTbl[x];
0005f0  e7d4400c          LDRB     r4,[r4,r12]
;;;473        prio = (INT8U)((y << 3) + x);                     /* Find priority of task getting the msg         */
0005f4  e08cc183          ADD      r12,r12,r3,LSL #3
0005f8  e20cc0ff          AND      r12,r12,#0xff
;;;474        if ((pevent->OSEventTbl[y] &= ~bitx) == 0x00) {   /* Remove this task from the waiting list        */
0005fc  e1d55004          BICS     r5,r5,r4
000600  e5c65008          STRB     r5,[r6,#8]
000604  1a000002          BNE      |L1.1556|
;;;475            pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
000608  e5d05001          LDRB     r5,[r0,#1]
00060c  e1c5500e          BIC      r5,r5,lr
000610  e5c05001          STRB     r5,[r0,#1]
                  |L1.1556|
;;;476        }
;;;477        ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
000614  e59f0260          LDR      r0,|L1.2172|
000618  e790010c          LDR      r0,[r0,r12,LSL #2]
;;;478        ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
00061c  e3a05000          MOV      r5,#0
000620  e1c052ba          STRH     r5,[r0,#0x2a]
;;;479        ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
000624  e580501c          STR      r5,[r0,#0x1c]
;;;480    #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
;;;481        ptcb->OSTCBMsg       = msg;                       /* Send message directly to waiting task         */
000628  e5801020          STR      r1,[r0,#0x20]
;;;482    #else
;;;483        msg                  = msg;                       /* Prevent compiler warning if not used          */
;;;484    #endif
;;;485        ptcb->OSTCBStat     &= ~msk;                      /* Clear bit associated with event type          */
00062c  e5d0102c          LDRB     r1,[r0,#0x2c]
000630  e1c11002          BIC      r1,r1,r2
000634  e5c0102c          STRB     r1,[r0,#0x2c]
;;;486        if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
000638  e5d0002c          LDRB     r0,[r0,#0x2c]
00063c  e3500000          CMP      r0,#0
000640  1a000007          BNE      |L1.1636|
;;;487            OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
000644  e59f0210          LDR      r0,|L1.2140|
000648  e5d01007          LDRB     r1,[r0,#7]  ; OSRdyGrp
00064c  e181100e          ORR      r1,r1,lr
000650  e5c01007          STRB     r1,[r0,#7]  ; OSRdyGrp
;;;488            OSRdyTbl[y]     |=  bitx;
000654  e280000a          ADD      r0,r0,#0xa
000658  e7d01003          LDRB     r1,[r0,r3]
00065c  e1811004          ORR      r1,r1,r4
000660  e7c01003          STRB     r1,[r0,r3]
                  |L1.1636|
;;;489        }
;;;490        return (prio);
000664  e8bd4070          POP      {r4-r6,lr}
000668  e1a0000c          MOV      r0,r12
;;;491    }
00066c  e12fff1e          BX       lr
;;;492    #endif
                          ENDP

                  OS_EventTaskWait PROC
;;;509    void  OS_EventTaskWait (OS_EVENT *pevent)
;;;510    {
000670  e92d4010          PUSH     {r4,lr}
;;;511        OSTCBCur->OSTCBEventPtr = pevent;            /* Store pointer to event control block in TCB        */
000674  e59fc1e0          LDR      r12,|L1.2140|
000678  e59c1020          LDR      r1,[r12,#0x20]  ; OSTCBCur
00067c  e581001c          STR      r0,[r1,#0x1c]
;;;512        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {   /* Task no longer ready      */
000680  e5d1202f          LDRB     r2,[r1,#0x2f]
000684  e28ce00a          ADD      lr,r12,#0xa
000688  e5d14030          LDRB     r4,[r1,#0x30]
00068c  e7de3002          LDRB     r3,[lr,r2]
000690  e1d33004          BICS     r3,r3,r4
000694  e7ce3002          STRB     r3,[lr,r2]
000698  1a000003          BNE      |L1.1708|
;;;513            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
00069c  e5d12031          LDRB     r2,[r1,#0x31]
0006a0  e5dc3007          LDRB     r3,[r12,#7]  ; OSRdyGrp
0006a4  e1c32002          BIC      r2,r3,r2
0006a8  e5cc2007          STRB     r2,[r12,#7]  ; OSRdyGrp
                  |L1.1708|
;;;514        }
;;;515        pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
0006ac  e5d1202f          LDRB     r2,[r1,#0x2f]
0006b0  e5d11030          LDRB     r1,[r1,#0x30]
0006b4  e0822000          ADD      r2,r2,r0
0006b8  e5d23008          LDRB     r3,[r2,#8]
0006bc  e1811003          ORR      r1,r1,r3
0006c0  e5c21008          STRB     r1,[r2,#8]
;;;516        pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
0006c4  e59c2020          LDR      r2,[r12,#0x20]  ; OSTCBCur
0006c8  e5d01001          LDRB     r1,[r0,#1]
0006cc  e5d22031          LDRB     r2,[r2,#0x31]
0006d0  e1811002          ORR      r1,r1,r2
0006d4  e5c01001          STRB     r1,[r0,#1]
;;;517    }
0006d8  e8bd4010          POP      {r4,lr}
0006dc  e12fff1e          BX       lr
;;;518    #endif
                          ENDP

                  OS_EventTO PROC
;;;536    {
;;;537        if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
0006e0  e59f3174          LDR      r3,|L1.2140|
0006e4  e5932020          LDR      r2,[r3,#0x20]  ; OSTCBCur
0006e8  e5d2102f          LDRB     r1,[r2,#0x2f]
0006ec  e5d22030          LDRB     r2,[r2,#0x30]
0006f0  e0811000          ADD      r1,r1,r0
0006f4  e5d1c008          LDRB     r12,[r1,#8]
0006f8  e1dc2002          BICS     r2,r12,r2
0006fc  e5c12008          STRB     r2,[r1,#8]
000700  1a000004          BNE      |L1.1816|
;;;538            pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
000704  e5932020          LDR      r2,[r3,#0x20]  ; OSTCBCur
000708  e5d01001          LDRB     r1,[r0,#1]
00070c  e5d22031          LDRB     r2,[r2,#0x31]
000710  e1c11002          BIC      r1,r1,r2
000714  e5c01001          STRB     r1,[r0,#1]
                  |L1.1816|
;;;539        }
;;;540        OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
000718  e5930020          LDR      r0,[r3,#0x20]  ; OSTCBCur
00071c  e3a01000          MOV      r1,#0
000720  e5c0102c          STRB     r1,[r0,#0x2c]
;;;541        OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
000724  e580101c          STR      r1,[r0,#0x1c]
;;;542    }
000728  e12fff1e          BX       lr
;;;543    #endif
                          ENDP

                  OS_EventWaitListInit PROC
;;;563    
;;;564        pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
00072c  e3a01000          MOV      r1,#0
000730  e5c01001          STRB     r1,[r0,#1]
;;;565        ptbl               = &pevent->OSEventTbl[0];
;;;566    
;;;567    #if OS_EVENT_TBL_SIZE > 0
;;;568        *ptbl++            = 0x00;
000734  e5c01008          STRB     r1,[r0,#8]
;;;569    #endif
;;;570    
;;;571    #if OS_EVENT_TBL_SIZE > 1
;;;572        *ptbl++            = 0x00;
000738  e5c01009          STRB     r1,[r0,#9]
;;;573    #endif
;;;574    
;;;575    #if OS_EVENT_TBL_SIZE > 2
;;;576        *ptbl++            = 0x00;
;;;577    #endif
;;;578    
;;;579    #if OS_EVENT_TBL_SIZE > 3
;;;580        *ptbl++            = 0x00;
;;;581    #endif
;;;582    
;;;583    #if OS_EVENT_TBL_SIZE > 4
;;;584        *ptbl++            = 0x00;
;;;585    #endif
;;;586    
;;;587    #if OS_EVENT_TBL_SIZE > 5
;;;588        *ptbl++            = 0x00;
;;;589    #endif
;;;590    
;;;591    #if OS_EVENT_TBL_SIZE > 6
;;;592        *ptbl++            = 0x00;
;;;593    #endif
;;;594    
;;;595    #if OS_EVENT_TBL_SIZE > 7
;;;596        *ptbl              = 0x00;
;;;597    #endif

⌨️ 快捷键说明

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