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

📄 os_task.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000598  15c50000          STRBNE   r0,[r5,#0]
;;;637            return (0);
00059c  1a00000e          BNE      |L1.1500|
;;;638        }
;;;639        OS_ENTER_CRITICAL();
0005a0  ebfffffe          BL       OS_CPU_SR_Save
;;;640        if (prio == OS_PRIO_SELF) {                          /* See if caller desires it's own name        */
0005a4  e35600ff          CMP      r6,#0xff
0005a8  e1a04000          MOV      r4,r0                 ;639
;;;641            prio = OSTCBCur->OSTCBPrio;
0005ac  059f03a4          LDREQ    r0,|L1.2392|
0005b0  05900000          LDREQ    r0,[r0,#0]  ; OSTCBCur
0005b4  05d0602e          LDRBEQ   r6,[r0,#0x2e]
;;;642        }
;;;643        ptcb = OSTCBPrioTbl[prio];
0005b8  e59f0394          LDR      r0,|L1.2388|
0005bc  e7900106          LDR      r0,[r0,r6,LSL #2]
0005c0  e3a06043          MOV      r6,#0x43
;;;644        if (ptcb == (OS_TCB *)0) {                           /* Does task exist?                           */
0005c4  e3500000          CMP      r0,#0
;;;645            OS_EXIT_CRITICAL();                              /* No                                         */
;;;646            *perr = OS_ERR_TASK_NOT_EXIST;
;;;647            return (0);
;;;648        }
;;;649        if (ptcb == OS_TCB_RESERVED) {                       /* Task assigned to a Mutex?                  */
0005c8  13500001          CMPNE    r0,#1
0005cc  1a000005          BNE      |L1.1512|
;;;650            OS_EXIT_CRITICAL();                              /* Yes                                        */
0005d0  e1a00004          MOV      r0,r4
0005d4  ebfffffe          BL       OS_CPU_SR_Restore
;;;651            *perr = OS_ERR_TASK_NOT_EXIST;
0005d8  e5c56000          STRB     r6,[r5,#0]
                  |L1.1500|
;;;652            return (0);
0005dc  e3a00000          MOV      r0,#0
                  |L1.1504|
0005e0  e8bd41f0          POP      {r4-r8,lr}
;;;653        }
;;;654        len   = OS_StrCopy(pname, ptcb->OSTCBTaskName);      /* Yes, copy name from TCB                    */
;;;655        OS_EXIT_CRITICAL();
;;;656        *perr = OS_ERR_NONE;
;;;657        return (len);
;;;658    }
0005e4  e12fff1e          BX       lr
                  |L1.1512|
0005e8  e2801048          ADD      r1,r0,#0x48           ;654
0005ec  e1a00007          MOV      r0,r7                 ;654
0005f0  ebfffffe          BL       OS_StrCopy
0005f4  e1a06000          MOV      r6,r0                 ;654
0005f8  e1a00004          MOV      r0,r4                 ;655
0005fc  ebfffffe          BL       OS_CPU_SR_Restore
000600  e3a00000          MOV      r0,#0                 ;656
000604  e5c50000          STRB     r0,[r5,#0]            ;656
000608  e1a00006          MOV      r0,r6                 ;657
00060c  eafffff3          B        |L1.1504|
;;;659    #endif
                          ENDP

                  OSTaskNameSet PROC
;;;689    void  OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *perr)
;;;690    {
000610  e92d41f0          PUSH     {r4-r8,lr}
000614  e1a05000          MOV      r5,r0
;;;691        INT8U      len;
;;;692        OS_TCB    *ptcb;
;;;693    #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
;;;694        OS_CPU_SR  cpu_sr = 0;
;;;695    #endif
;;;696    
;;;697    
;;;698    
;;;699    #if OS_ARG_CHK_EN > 0
;;;700        if (perr == (INT8U *)0) {                        /* Validate 'perr'                                */
;;;701            return;
;;;702        }
;;;703        if (prio > OS_LOWEST_PRIO) {                     /* Task priority valid ?                          */
;;;704            if (prio != OS_PRIO_SELF) {
;;;705                *perr = OS_ERR_PRIO_INVALID;             /* No                                             */
;;;706                return;
;;;707            }
;;;708        }
;;;709        if (pname == (INT8U *)0) {                       /* Is 'pname' a NULL pointer?                     */
;;;710            *perr = OS_ERR_PNAME_NULL;                   /* Yes                                            */
;;;711            return;
;;;712        }
;;;713    #endif
;;;714        if (OSIntNesting > 0) {                          /* See if trying to call from an ISR              */
000618  e59f0348          LDR      r0,|L1.2408|
00061c  e1a07001          MOV      r7,r1                 ;690
000620  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000624  e1a04002          MOV      r4,r2                 ;690
000628  e3500000          CMP      r0,#0
;;;715            *perr = OS_ERR_NAME_SET_ISR;
00062c  13a00012          MOVNE    r0,#0x12
;;;716            return;
000630  1a00001e          BNE      |L1.1712|
;;;717        }
;;;718        OS_ENTER_CRITICAL();
000634  ebfffffe          BL       OS_CPU_SR_Save
;;;719        if (prio == OS_PRIO_SELF) {                      /* See if caller desires to set it's own name     */
000638  e35500ff          CMP      r5,#0xff
00063c  e1a06000          MOV      r6,r0                 ;718
;;;720            prio = OSTCBCur->OSTCBPrio;
000640  059f0310          LDREQ    r0,|L1.2392|
;;;721        }
;;;722        ptcb = OSTCBPrioTbl[prio];
000644  e3a08043          MOV      r8,#0x43
000648  05900000          LDREQ    r0,[r0,#0]            ;720  ; OSTCBCur
00064c  05d0502e          LDRBEQ   r5,[r0,#0x2e]         ;720
000650  e59f02fc          LDR      r0,|L1.2388|
000654  e7905105          LDR      r5,[r0,r5,LSL #2]
;;;723        if (ptcb == (OS_TCB *)0) {                       /* Does task exist?                               */
000658  e3550000          CMP      r5,#0
;;;724            OS_EXIT_CRITICAL();                          /* No                                             */
;;;725            *perr = OS_ERR_TASK_NOT_EXIST;
;;;726            return;
;;;727        }
;;;728        if (ptcb == OS_TCB_RESERVED) {                   /* Task assigned to a Mutex?                      */
00065c  13550001          CMPNE    r5,#1
000660  1a000004          BNE      |L1.1656|
;;;729            OS_EXIT_CRITICAL();                          /* Yes                                            */
000664  e1a00006          MOV      r0,r6
000668  ebfffffe          BL       OS_CPU_SR_Restore
;;;730            *perr = OS_ERR_TASK_NOT_EXIST;
00066c  e5c48000          STRB     r8,[r4,#0]
                  |L1.1648|
;;;731            return;
;;;732        }
;;;733        len = OS_StrLen(pname);                          /* Yes, Can we fit the string in the TCB?         */
;;;734        if (len > (OS_TASK_NAME_SIZE - 1)) {             /*      No                                        */
;;;735            OS_EXIT_CRITICAL();
;;;736            *perr = OS_ERR_TASK_NAME_TOO_LONG;
;;;737            return;
;;;738        }
;;;739        (void)OS_StrCopy(ptcb->OSTCBTaskName, pname);    /*      Yes, copy to TCB                          */
;;;740        OS_EXIT_CRITICAL();
;;;741        *perr = OS_ERR_NONE;
;;;742    }
000670  e8bd41f0          POP      {r4-r8,lr}
000674  e12fff1e          BX       lr
                  |L1.1656|
000678  e1a00007          MOV      r0,r7                 ;733
00067c  ebfffffe          BL       OS_StrLen
000680  e350000f          CMP      r0,#0xf               ;734
000684  9a000003          BLS      |L1.1688|
000688  e1a00006          MOV      r0,r6                 ;735
00068c  ebfffffe          BL       OS_CPU_SR_Restore
000690  e3a00041          MOV      r0,#0x41              ;736
000694  ea000005          B        |L1.1712|
                  |L1.1688|
000698  e1a01007          MOV      r1,r7                 ;739
00069c  e2850048          ADD      r0,r5,#0x48           ;739
0006a0  ebfffffe          BL       OS_StrCopy
0006a4  e1a00006          MOV      r0,r6                 ;740
0006a8  ebfffffe          BL       OS_CPU_SR_Restore
0006ac  e3a00000          MOV      r0,#0                 ;741
                  |L1.1712|
0006b0  e5c40000          STRB     r0,[r4,#0]            ;741
0006b4  eaffffed          B        |L1.1648|
;;;743    #endif
                          ENDP

                  OSTaskResume PROC
;;;765    INT8U  OSTaskResume (INT8U prio)
;;;766    {
0006b8  e92d4010          PUSH     {r4,lr}
0006bc  e1a04000          MOV      r4,r0
;;;767        OS_TCB    *ptcb;
;;;768    #if OS_CRITICAL_METHOD == 3                                   /* Storage for CPU status register       */
;;;769        OS_CPU_SR  cpu_sr = 0;
;;;770    #endif
;;;771    
;;;772    
;;;773    
;;;774    #if OS_ARG_CHK_EN > 0
;;;775        if (prio >= OS_LOWEST_PRIO) {                             /* Make sure task priority is valid      */
;;;776            return (OS_ERR_PRIO_INVALID);
;;;777        }
;;;778    #endif
;;;779        OS_ENTER_CRITICAL();
0006c0  ebfffffe          BL       OS_CPU_SR_Save
;;;780        ptcb = OSTCBPrioTbl[prio];
0006c4  e59f1288          LDR      r1,|L1.2388|
0006c8  e7911104          LDR      r1,[r1,r4,LSL #2]
;;;781        if (ptcb == (OS_TCB *)0) {                                /* Task to suspend must exist            */
0006cc  e3510000          CMP      r1,#0
0006d0  1a000003          BNE      |L1.1764|
;;;782            OS_EXIT_CRITICAL();
0006d4  ebfffffe          BL       OS_CPU_SR_Restore
;;;783            return (OS_ERR_TASK_RESUME_PRIO);
0006d8  e3a00046          MOV      r0,#0x46
                  |L1.1756|
0006dc  e8bd4010          POP      {r4,lr}
;;;784        }
;;;785        if (ptcb == OS_TCB_RESERVED) {                            /* See if assigned to Mutex              */
;;;786            OS_EXIT_CRITICAL();
;;;787            return (OS_ERR_TASK_NOT_EXIST);
;;;788        }
;;;789        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended                */
;;;790            ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;           /* Remove suspension                     */
;;;791            if (ptcb->OSTCBStat == OS_STAT_RDY) {                 /* See if task is now ready              */
;;;792                if (ptcb->OSTCBDly == 0) {
;;;793                    OSRdyGrp               |= ptcb->OSTCBBitY;    /* Yes, Make task ready to run           */
;;;794                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;795                    OS_EXIT_CRITICAL();
;;;796                    if (OSRunning == OS_TRUE) {
;;;797                        OS_Sched();                               /* Find new highest priority task        */
;;;798                    }
;;;799                } else {
;;;800                    OS_EXIT_CRITICAL();
;;;801                }
;;;802            } else {                                              /* Must be pending on event              */
;;;803                OS_EXIT_CRITICAL();
;;;804            }
;;;805            return (OS_ERR_NONE);
;;;806        }
;;;807        OS_EXIT_CRITICAL();
;;;808        return (OS_ERR_TASK_NOT_SUSPENDED);
;;;809    }
0006e0  e12fff1e          BX       lr
                  |L1.1764|
0006e4  e3510001          CMP      r1,#1                 ;785
0006e8  1a000002          BNE      |L1.1784|
0006ec  ebfffffe          BL       OS_CPU_SR_Restore
0006f0  e3a00043          MOV      r0,#0x43              ;787
0006f4  eafffff8          B        |L1.1756|
                  |L1.1784|
0006f8  e5d1202c          LDRB     r2,[r1,#0x2c]         ;789
0006fc  e3120008          TST      r2,#8                 ;789
000700  0a000019          BEQ      |L1.1900|
000704  e3c22008          BIC      r2,r2,#8              ;790
000708  e31200ff          TST      r2,#0xff              ;791
00070c  e5c1202c          STRB     r2,[r1,#0x2c]         ;790
000710  01d122ba          LDRHEQ   r2,[r1,#0x2a]         ;792
000714  03520000          CMPEQ    r2,#0                 ;792
000718  1a000010          BNE      |L1.1888|
00071c  e59f223c          LDR      r2,|L1.2400|
000720  e5d13032          LDRB     r3,[r1,#0x32]         ;793
000724  e5d2c000          LDRB     r12,[r2,#0]           ;793  ; OSRdyGrp
000728  e183300c          ORR      r3,r3,r12             ;793
00072c  e5c23000          STRB     r3,[r2,#0]            ;793  ; OSRdyGrp
000730  e5d12030          LDRB     r2,[r1,#0x30]         ;794
000734  e59f3220          LDR      r3,|L1.2396|
000738  e5d11031          LDRB     r1,[r1,#0x31]         ;794
00073c  e7d3c002          LDRB     r12,[r3,r2]           ;794
000740  e181100c          ORR      r1,r1,r12             ;794
000744  e7c31002          STRB     r1,[r3,r2]            ;794
000748  ebfffffe          BL       OS_CPU_SR_Restore
00074c  e59f0210          LDR      r0,|L1.2404|
000750  e5d00000          LDRB     r0,[r0,#0]            ;796  ; OSRunning
000754  e3500001          CMP      r0,#1                 ;796
000758  0bfffffe          BLEQ     OS_Sched
00075c  ea000000          B        |L1.1892|

⌨️ 快捷键说明

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