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

📄 os_task.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00037c  e7d10000          LDRB     r0,[r1,r0]            ;393
000380  e5d71020          LDRB     r1,[r7,#0x20]         ;393
000384  e1c00001          BIC      r0,r0,r1              ;393
000388  e21000ff          ANDS     r0,r0,#0xff           ;393
00038c  e5d7101f          LDRB     r1,[r7,#0x1f]         ;393
000390  e2852008          ADD      r2,r5,#8              ;393
000394  e7c20001          STRB     r0,[r2,r1]            ;393
000398  1a000003          BNE      |L1.940|              ;393
00039c  e5d50001          LDRB     r0,[r5,#1]            ;394
0003a0  e5d71021          LDRB     r1,[r7,#0x21]         ;394
0003a4  e1c00001          BIC      r0,r0,r1              ;394
0003a8  e5c50001          STRB     r0,[r5,#1]            ;394
                  |L1.940|
0003ac  e5976014          LDR      r6,[r7,#0x14]         ;399
0003b0  e3560000          CMP      r6,#0                 ;400
0003b4  0a000001          BEQ      |L1.960|              ;400
0003b8  e1a00006          MOV      r0,r6                 ;401
0003bc  ebfffffe          BL       OS_FlagUnlink         ;401
                  |L1.960|
0003c0  e3a00000          MOV      r0,#0                 ;404
0003c4  e1c701ba          STRH     r0,[r7,#0x1a]         ;404
0003c8  e5c7001c          STRB     r0,[r7,#0x1c]         ;405
0003cc  e59f03a8          LDR      r0,|L1.1916|          ;406
0003d0  e5d00000          LDRB     r0,[r0,#0]            ;406  ; OSLockNesting
0003d4  e35000ff          CMP      r0,#0xff              ;406
0003d8  aa000004          BGE      |L1.1008|             ;406
0003dc  e59f0398          LDR      r0,|L1.1916|          ;407
0003e0  e5d00000          LDRB     r0,[r0,#0]            ;407  ; OSLockNesting
0003e4  e2800001          ADD      r0,r0,#1              ;407
0003e8  e59f138c          LDR      r1,|L1.1916|          ;407
0003ec  e5c10000          STRB     r0,[r1,#0]            ;407  ; OSLockNesting
                  |L1.1008|
0003f0  ef000003          SVC      0x3  ; formerly SWI   ;409
0003f4  ebfffffe          BL       OS_Dummy              ;410
0003f8  ef000002          SVC      0x2  ; formerly SWI   ;411
0003fc  e59f0378          LDR      r0,|L1.1916|          ;412
000400  e5d00000          LDRB     r0,[r0,#0]            ;412  ; OSLockNesting
000404  e3500000          CMP      r0,#0                 ;412
000408  da000004          BLE      |L1.1056|             ;412
00040c  e59f0368          LDR      r0,|L1.1916|          ;413
000410  e5d00000          LDRB     r0,[r0,#0]            ;413  ; OSLockNesting
000414  e2400001          SUB      r0,r0,#1              ;413
000418  e59f135c          LDR      r1,|L1.1916|          ;413
00041c  e5c10000          STRB     r0,[r1,#0]            ;413  ; OSLockNesting
                  |L1.1056|
000420  e1a00007          MOV      r0,r7                 ;415
000424  ebfffffe          BL       OSTaskDelHook         ;415
000428  e59f0340          LDR      r0,|L1.1904|          ;416
00042c  e5d00000          LDRB     r0,[r0,#0]            ;416  ; OSTaskCtr
000430  e2400001          SUB      r0,r0,#1              ;416
000434  e59f1334          LDR      r1,|L1.1904|          ;416
000438  e5c10000          STRB     r0,[r1,#0]            ;416  ; OSTaskCtr
00043c  e3a00000          MOV      r0,#0                 ;417
000440  e59f1314          LDR      r1,|L1.1884|          ;417
000444  e7810104          STR      r0,[r1,r4,LSL #2]     ;417
000448  e5970008          LDR      r0,[r7,#8]            ;418
00044c  e3500000          CMP      r0,#0                 ;418
000450  1a000006          BNE      |L1.1136|             ;418
000454  e3a00000          MOV      r0,#0                 ;419
000458  e5971004          LDR      r1,[r7,#4]            ;419
00045c  e5810008          STR      r0,[r1,#8]            ;419
000460  e59f1318          LDR      r1,|L1.1920|          ;420
000464  e5970004          LDR      r0,[r7,#4]            ;420
000468  e5810000          STR      r0,[r1,#0]            ;420  ; OSTCBList
00046c  ea000004          B        |L1.1156|             ;420
                  |L1.1136|
000470  e9970003          LDMIB    r7,{r0,r1}            ;422
000474  e5810004          STR      r0,[r1,#4]            ;422
000478  e5970008          LDR      r0,[r7,#8]            ;423
00047c  e5971004          LDR      r1,[r7,#4]            ;423
000480  e5810008          STR      r0,[r1,#8]            ;423
                  |L1.1156|
000484  e59f02f8          LDR      r0,|L1.1924|          ;425
000488  e5900000          LDR      r0,[r0,#0]            ;425  ; OSTCBFreeList
00048c  e5870004          STR      r0,[r7,#4]            ;425
000490  e59f02ec          LDR      r0,|L1.1924|          ;426
000494  e5807000          STR      r7,[r0,#0]            ;426  ; OSTCBFreeList
000498  ef000003          SVC      0x3  ; formerly SWI   ;427
00049c  ebfffffe          BL       OS_Sched              ;428
0004a0  e3a00000          MOV      r0,#0                 ;429
0004a4  eaffff8a          B        |L1.724|              ;429
                  |L1.1192|
0004a8  ef000003          SVC      0x3  ; formerly SWI   ;431
0004ac  e3a0003c          MOV      r0,#0x3c              ;432
0004b0  eaffff87          B        |L1.724|              ;432
                          ENDP

                  OSTaskDelReq PROC
;;;482    INT8U  OSTaskDelReq (INT8U prio)
;;;483    {
0004b4  e92d41f0          PUSH     {r4-r8,lr}
0004b8  e1a04000          MOV      r4,r0
;;;484    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;485        OS_CPU_SR  cpu_sr;
;;;486    #endif
;;;487        BOOLEAN    stat;
;;;488        INT8U      err;
;;;489        OS_TCB    *ptcb;
;;;490    
;;;491    
;;;492    #if OS_ARG_CHK_EN > 0
;;;493        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to delete idle task     */
0004bc  e354000c          CMP      r4,#0xc
0004c0  1a000001          BNE      |L1.1228|
;;;494            return (OS_TASK_DEL_IDLE);
0004c4  e3a0003d          MOV      r0,#0x3d
;;;495        }
;;;496        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;497            return (OS_PRIO_INVALID);
;;;498        }
;;;499    #endif
;;;500        if (prio == OS_PRIO_SELF) {                                 /* See if a task is requesting to ...  */
;;;501            OS_ENTER_CRITICAL();                                    /* ... this task to delete itself      */
;;;502            stat = OSTCBCur->OSTCBDelReq;                           /* Return request status to caller     */
;;;503            OS_EXIT_CRITICAL();
;;;504            return (stat);
;;;505        }
;;;506        OS_ENTER_CRITICAL();
;;;507        if ((ptcb = OSTCBPrioTbl[prio]) != (OS_TCB *)0) {           /* Task to delete must exist           */
;;;508            ptcb->OSTCBDelReq = OS_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
;;;509            err               = OS_NO_ERR;
;;;510        } else {
;;;511            err               = OS_TASK_NOT_EXIST;                  /* Task must be deleted                */
;;;512        }
;;;513        OS_EXIT_CRITICAL();
;;;514        return (err);
;;;515    }
                  |L1.1224|
0004c8  e8bd81f0          POP      {r4-r8,pc}
                  |L1.1228|
0004cc  e354000c          CMP      r4,#0xc               ;496
0004d0  ba000003          BLT      |L1.1252|             ;496
0004d4  e35400ff          CMP      r4,#0xff              ;496
0004d8  0a000001          BEQ      |L1.1252|             ;496
0004dc  e3a0002a          MOV      r0,#0x2a              ;497
0004e0  eafffff8          B        |L1.1224|             ;497
                  |L1.1252|
0004e4  e35400ff          CMP      r4,#0xff              ;500
0004e8  1a000006          BNE      |L1.1288|             ;500
0004ec  ef000002          SVC      0x2  ; formerly SWI   ;501
0004f0  e59f026c          LDR      r0,|L1.1892|          ;502
0004f4  e5900000          LDR      r0,[r0,#0]            ;502  ; OSTCBCur
0004f8  e5d05022          LDRB     r5,[r0,#0x22]         ;502
0004fc  ef000003          SVC      0x3  ; formerly SWI   ;503
000500  e1a00005          MOV      r0,r5                 ;504
000504  eaffffef          B        |L1.1224|             ;504
                  |L1.1288|
000508  ef000002          SVC      0x2  ; formerly SWI   ;506
00050c  e59f0248          LDR      r0,|L1.1884|          ;507
000510  e7907104          LDR      r7,[r0,r4,LSL #2]     ;507
000514  e3570000          CMP      r7,#0                 ;507
000518  0a000003          BEQ      |L1.1324|             ;507
00051c  e3a0003e          MOV      r0,#0x3e              ;508
000520  e5c70022          STRB     r0,[r7,#0x22]         ;508
000524  e3a06000          MOV      r6,#0                 ;509
000528  ea000000          B        |L1.1328|             ;509
                  |L1.1324|
00052c  e3a0600b          MOV      r6,#0xb               ;511
                  |L1.1328|
000530  ef000003          SVC      0x3  ; formerly SWI   ;513
000534  e1a00006          MOV      r0,r6                 ;514
000538  eaffffe2          B        |L1.1224|             ;514
                          ENDP

                  OSTaskResume PROC
;;;536    INT8U  OSTaskResume (INT8U prio)
;;;537    {
00053c  e92d4070          PUSH     {r4-r6,lr}
000540  e1a04000          MOV      r4,r0
;;;538    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;539        OS_CPU_SR  cpu_sr;
;;;540    #endif
;;;541        OS_TCB    *ptcb;
;;;542    
;;;543    
;;;544    #if OS_ARG_CHK_EN > 0
;;;545        if (prio >= OS_LOWEST_PRIO) {                               /* Make sure task priority is valid    */
000544  e354000c          CMP      r4,#0xc
000548  ba000001          BLT      |L1.1364|
;;;546            return (OS_PRIO_INVALID);
00054c  e3a0002a          MOV      r0,#0x2a
;;;547        }
;;;548    #endif
;;;549        OS_ENTER_CRITICAL();
;;;550        if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {           /* Task to suspend must exist          */
;;;551            OS_EXIT_CRITICAL();
;;;552            return (OS_TASK_RESUME_PRIO);
;;;553        }
;;;554        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != 0x00) {                     /* Task must be suspended   */
;;;555            if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) &&      /* Remove suspension        */
;;;556                 (ptcb->OSTCBDly  == 0)) {                                     /* Must not be delayed      */
;;;557                OSRdyGrp               |= ptcb->OSTCBBitY;                     /* Make task ready to run   */
;;;558                OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;559                OS_EXIT_CRITICAL();
;;;560                OS_Sched();
;;;561            } else {
;;;562                OS_EXIT_CRITICAL();
;;;563            }
;;;564            return (OS_NO_ERR);
;;;565        }
;;;566        OS_EXIT_CRITICAL();
;;;567        return (OS_TASK_NOT_SUSPENDED);
;;;568    }
                  |L1.1360|
000550  e8bd8070          POP      {r4-r6,pc}
                  |L1.1364|
000554  ef000002          SVC      0x2  ; formerly SWI   ;549
000558  e59f01fc          LDR      r0,|L1.1884|          ;550
00055c  e7905104          LDR      r5,[r0,r4,LSL #2]     ;550
000560  e3550000          CMP      r5,#0                 ;550
000564  1a000002          BNE      |L1.1396|             ;550
000568  ef000003          SVC      0x3  ; formerly SWI   ;551
00056c  e3a00064          MOV      r0,#0x64              ;552
000570  eafffff6          B        |L1.1360|             ;552
                  |L1.1396|
000574  e5d5001c          LDRB     r0,[r5,#0x1c]         ;554
000578  e3100008          TST      r0,#8                 ;554
00057c  0a00001a          BEQ      |L1.1516|             ;554
000580  e5d5001c          LDRB     r0,[r5,#0x1c]         ;555
000584  e3d00008          BICS     r0,r0,#8              ;555
000588  e5c5001c          STRB     r0,[r5,#0x1c]         ;555
00058c  1a000013          BNE      |L1.1504|             ;555
000590  e1d501ba          LDRH     r0,[r5,#0x1a]         ;556
000594  e3500000          CMP      r0,#0                 ;556
000598  1a000010          BNE      |L1.1504|             ;556

⌨️ 快捷键说明

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