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

📄 os_task.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00059c  e5d50021          LDRB     r0,[r5,#0x21]         ;557
0005a0  e59f11c4          LDR      r1,|L1.1900|          ;557
0005a4  e5d11000          LDRB     r1,[r1,#0]            ;557  ; OSRdyGrp
0005a8  e1800001          ORR      r0,r0,r1              ;557
0005ac  e59f11b8          LDR      r1,|L1.1900|          ;557
0005b0  e5c10000          STRB     r0,[r1,#0]            ;557  ; OSRdyGrp
0005b4  e5d5001f          LDRB     r0,[r5,#0x1f]         ;558
0005b8  e59f11a8          LDR      r1,|L1.1896|          ;558
0005bc  e7d10000          LDRB     r0,[r1,r0]            ;558
0005c0  e5d51020          LDRB     r1,[r5,#0x20]         ;558
0005c4  e1800001          ORR      r0,r0,r1              ;558
0005c8  e5d5101f          LDRB     r1,[r5,#0x1f]         ;558
0005cc  e59f2194          LDR      r2,|L1.1896|          ;558
0005d0  e7c20001          STRB     r0,[r2,r1]            ;558
0005d4  ef000003          SVC      0x3  ; formerly SWI   ;559
0005d8  ebfffffe          BL       OS_Sched              ;560
0005dc  ea000000          B        |L1.1508|             ;560
                  |L1.1504|
0005e0  ef000003          SVC      0x3  ; formerly SWI   ;562
                  |L1.1508|
0005e4  e3a00000          MOV      r0,#0                 ;564
0005e8  eaffffd8          B        |L1.1360|             ;564
                  |L1.1516|
0005ec  ef000003          SVC      0x3  ; formerly SWI   ;566
0005f0  e3a00065          MOV      r0,#0x65              ;567
0005f4  eaffffd5          B        |L1.1360|             ;567
                          ENDP

                  OSTaskSuspend PROC
;;;663    INT8U  OSTaskSuspend (INT8U prio)
;;;664    {
0005f8  e92d4070          PUSH     {r4-r6,lr}
0005fc  e1a04000          MOV      r4,r0
;;;665    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;666        OS_CPU_SR  cpu_sr;
;;;667    #endif
;;;668        BOOLEAN    self;
;;;669        OS_TCB    *ptcb;
;;;670    
;;;671    
;;;672    #if OS_ARG_CHK_EN > 0
;;;673        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to suspend idle task    */
000600  e354000c          CMP      r4,#0xc
000604  1a000001          BNE      |L1.1552|
;;;674            return (OS_TASK_SUSPEND_IDLE);
000608  e3a0005b          MOV      r0,#0x5b
;;;675        }
;;;676        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;677            return (OS_PRIO_INVALID);
;;;678        }
;;;679    #endif
;;;680        OS_ENTER_CRITICAL();
;;;681        if (prio == OS_PRIO_SELF) {                                 /* See if suspend SELF                 */
;;;682            prio = OSTCBCur->OSTCBPrio;
;;;683            self = TRUE;
;;;684        } else if (prio == OSTCBCur->OSTCBPrio) {                   /* See if suspending self              */
;;;685            self = TRUE;
;;;686        } else {
;;;687            self = FALSE;                                           /* No suspending another task          */
;;;688        }
;;;689        if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {           /* Task to suspend must exist          */
;;;690            OS_EXIT_CRITICAL();
;;;691            return (OS_TASK_SUSPEND_PRIO);
;;;692        }
;;;693        if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready                 */
;;;694            OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;695        }
;;;696        ptcb->OSTCBStat |= OS_STAT_SUSPEND;                         /* Status of task is 'SUSPENDED'       */
;;;697        OS_EXIT_CRITICAL();
;;;698        if (self == TRUE) {                                         /* Context switch only if SELF         */
;;;699            OS_Sched();
;;;700        }
;;;701        return (OS_NO_ERR);
;;;702    }
                  |L1.1548|
00060c  e8bd8070          POP      {r4-r6,pc}
                  |L1.1552|
000610  e354000c          CMP      r4,#0xc               ;676
000614  ba000003          BLT      |L1.1576|             ;676
000618  e35400ff          CMP      r4,#0xff              ;676
00061c  0a000001          BEQ      |L1.1576|             ;676
000620  e3a0002a          MOV      r0,#0x2a              ;677
000624  eafffff8          B        |L1.1548|             ;677
                  |L1.1576|
000628  ef000002          SVC      0x2  ; formerly SWI   ;680
00062c  e35400ff          CMP      r4,#0xff              ;681
000630  1a000004          BNE      |L1.1608|             ;681
000634  e59f0128          LDR      r0,|L1.1892|          ;682
000638  e5900000          LDR      r0,[r0,#0]            ;682  ; OSTCBCur
00063c  e5d0401d          LDRB     r4,[r0,#0x1d]         ;682
000640  e3a05001          MOV      r5,#1                 ;683
000644  ea000007          B        |L1.1640|             ;683
                  |L1.1608|
000648  e59f0114          LDR      r0,|L1.1892|          ;684
00064c  e5900000          LDR      r0,[r0,#0]            ;684  ; OSTCBCur
000650  e5d0001d          LDRB     r0,[r0,#0x1d]         ;684
000654  e1500004          CMP      r0,r4                 ;684
000658  1a000001          BNE      |L1.1636|             ;684
00065c  e3a05001          MOV      r5,#1                 ;685
000660  ea000000          B        |L1.1640|             ;685
                  |L1.1636|
000664  e3a05000          MOV      r5,#0                 ;687
                  |L1.1640|
000668  e59f00ec          LDR      r0,|L1.1884|          ;689
00066c  e7906104          LDR      r6,[r0,r4,LSL #2]     ;689
000670  e3560000          CMP      r6,#0                 ;689
000674  1a000002          BNE      |L1.1668|             ;689
000678  ef000003          SVC      0x3  ; formerly SWI   ;690
00067c  e3a0005a          MOV      r0,#0x5a              ;691
000680  eaffffe1          B        |L1.1548|             ;691
                  |L1.1668|
000684  e5d6001f          LDRB     r0,[r6,#0x1f]         ;693
000688  e59f10d8          LDR      r1,|L1.1896|          ;693
00068c  e7d10000          LDRB     r0,[r1,r0]            ;693
000690  e5d61020          LDRB     r1,[r6,#0x20]         ;693
000694  e1c00001          BIC      r0,r0,r1              ;693
000698  e21000ff          ANDS     r0,r0,#0xff           ;693
00069c  e5d6101f          LDRB     r1,[r6,#0x1f]         ;693
0006a0  e59f20c0          LDR      r2,|L1.1896|          ;693
0006a4  e7c20001          STRB     r0,[r2,r1]            ;693
0006a8  1a000005          BNE      |L1.1732|             ;693
0006ac  e5d60021          LDRB     r0,[r6,#0x21]         ;694
0006b0  e59f10b4          LDR      r1,|L1.1900|          ;694
0006b4  e5d11000          LDRB     r1,[r1,#0]            ;694  ; OSRdyGrp
0006b8  e1c10000          BIC      r0,r1,r0              ;694
0006bc  e59f10a8          LDR      r1,|L1.1900|          ;694
0006c0  e5c10000          STRB     r0,[r1,#0]            ;694  ; OSRdyGrp
                  |L1.1732|
0006c4  e5d6001c          LDRB     r0,[r6,#0x1c]         ;696
0006c8  e3800008          ORR      r0,r0,#8              ;696
0006cc  e5c6001c          STRB     r0,[r6,#0x1c]         ;696
0006d0  ef000003          SVC      0x3  ; formerly SWI   ;697
0006d4  e3550001          CMP      r5,#1                 ;698
0006d8  1a000000          BNE      |L1.1760|             ;698
0006dc  ebfffffe          BL       OS_Sched              ;699
                  |L1.1760|
0006e0  e3a00000          MOV      r0,#0                 ;701
0006e4  eaffffc8          B        |L1.1548|             ;701
                          ENDP

                  OSTaskQuery PROC
;;;721    INT8U  OSTaskQuery (INT8U prio, OS_TCB *pdata)
;;;722    {
0006e8  e92d4070          PUSH     {r4-r6,lr}
0006ec  e1a04000          MOV      r4,r0
0006f0  e1a05001          MOV      r5,r1
;;;723    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;724        OS_CPU_SR  cpu_sr;
;;;725    #endif
;;;726        OS_TCB    *ptcb;
;;;727    
;;;728    
;;;729    #if OS_ARG_CHK_EN > 0
;;;730        if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {   /* Task priority valid ?                    */
0006f4  e354000c          CMP      r4,#0xc
0006f8  da000003          BLE      |L1.1804|
0006fc  e35400ff          CMP      r4,#0xff
000700  0a000001          BEQ      |L1.1804|
;;;731            return (OS_PRIO_INVALID);
000704  e3a0002a          MOV      r0,#0x2a
;;;732        }
;;;733    #endif
;;;734        OS_ENTER_CRITICAL();
;;;735        if (prio == OS_PRIO_SELF) {                            /* See if suspend SELF                      */
;;;736            prio = OSTCBCur->OSTCBPrio;
;;;737        }
;;;738        if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {      /* Task to query must exist                 */
;;;739            OS_EXIT_CRITICAL();
;;;740            return (OS_PRIO_ERR);
;;;741        }
;;;742        memcpy(pdata, ptcb, sizeof(OS_TCB));                   /* Copy TCB into user storage area          */
;;;743        OS_EXIT_CRITICAL();
;;;744        return (OS_NO_ERR);
;;;745    }
                  |L1.1800|
000708  e8bd8070          POP      {r4-r6,pc}
                  |L1.1804|
00070c  ef000002          SVC      0x2  ; formerly SWI   ;734
000710  e35400ff          CMP      r4,#0xff              ;735
000714  1a000002          BNE      |L1.1828|             ;735
000718  e59f0044          LDR      r0,|L1.1892|          ;736
00071c  e5900000          LDR      r0,[r0,#0]            ;736  ; OSTCBCur
000720  e5d0401d          LDRB     r4,[r0,#0x1d]         ;736
                  |L1.1828|
000724  e59f0030          LDR      r0,|L1.1884|          ;738
000728  e7906104          LDR      r6,[r0,r4,LSL #2]     ;738
00072c  e3560000          CMP      r6,#0                 ;738
000730  1a000002          BNE      |L1.1856|             ;738
000734  ef000003          SVC      0x3  ; formerly SWI   ;739
000738  e3a00029          MOV      r0,#0x29              ;740
00073c  eafffff1          B        |L1.1800|             ;740
                  |L1.1856|
000740  e3a02024          MOV      r2,#0x24              ;742
000744  e1a01006          MOV      r1,r6                 ;742
000748  e1a00005          MOV      r0,r5                 ;742
00074c  ebfffffe          BL       __aeabi_memcpy4       ;742
000750  ef000003          SVC      0x3  ; formerly SWI   ;743
000754  e3a00000          MOV      r0,#0                 ;744
000758  eaffffea          B        |L1.1800|             ;744
                  |L1.1884|
00075c  00000000          DCD      OSTCBPrioTbl          ;744
                  |L1.1888|
000760  00000000          DCD      OSMapTbl              ;744
                  |L1.1892|
000764  00000000          DCD      OSTCBCur              ;744
                  |L1.1896|
000768  00000000          DCD      OSRdyTbl              ;744
                  |L1.1900|
00076c  00000000          DCD      OSRdyGrp              ;744
                  |L1.1904|
000770  00000000          DCD      OSTaskCtr             ;744
                  |L1.1908|
000774  00000000          DCD      OSRunning             ;744
                  |L1.1912|
000778  00000000          DCD      OSIntNesting          ;744
                  |L1.1916|
00077c  00000000          DCD      OSLockNesting         ;744
                  |L1.1920|
000780  00000000          DCD      OSTCBList             ;744
                  |L1.1924|
000784  00000000          DCD      OSTCBFreeList         ;744
                          ENDP


⌨️ 快捷键说明

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