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

📄 os_task.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0005f4  e3a0003d          MOV      r0,#0x3d
                  |L1.1528|
0005f8  e8bd41f0          POP      {r4-r8,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    }
0005fc  e12fff1e          BX       lr
                  |L1.1536|
000600  e354000c          CMP      r4,#0xc               ;500
000604  ba000003          BLT      |L1.1560|             ;500
000608  e35400ff          CMP      r4,#0xff              ;500
00060c  0a000001          BEQ      |L1.1560|             ;500
000610  e3a0002a          MOV      r0,#0x2a              ;501
000614  eafffff7          B        |L1.1528|             ;501
                  |L1.1560|
000618  e35400ff          CMP      r4,#0xff              ;504
00061c  1a000006          BNE      |L1.1596|             ;504
000620  ef000002          SVC      0x2  ; formerly SWI   ;505
000624  e59f0338          LDR      r0,|L1.2404|          ;506
000628  e5900000          LDR      r0,[r0,#0]            ;506  ; OSTCBCur
00062c  e5d05032          LDRB     r5,[r0,#0x32]         ;506
000630  ef000003          SVC      0x3  ; formerly SWI   ;507
000634  e1a00005          MOV      r0,r5                 ;508
000638  eaffffee          B        |L1.1528|             ;508
                  |L1.1596|
00063c  ef000002          SVC      0x2  ; formerly SWI   ;510
000640  e59f0314          LDR      r0,|L1.2396|          ;511
000644  e7906104          LDR      r6,[r0,r4,LSL #2]     ;511
000648  e3560000          CMP      r6,#0                 ;512
00064c  0a000003          BEQ      |L1.1632|             ;512
000650  e3a0003e          MOV      r0,#0x3e              ;513
000654  e5c60032          STRB     r0,[r6,#0x32]         ;513
000658  e3a07000          MOV      r7,#0                 ;514
00065c  ea000000          B        |L1.1636|             ;514
                  |L1.1632|
000660  e3a0700b          MOV      r7,#0xb               ;516
                  |L1.1636|
000664  ef000003          SVC      0x3  ; formerly SWI   ;518
000668  e1a00007          MOV      r0,r7                 ;519
00066c  eaffffe1          B        |L1.1528|             ;519
                          ENDP

                  OSTaskResume PROC
;;;541    INT8U  OSTaskResume (INT8U prio)
;;;542    {
000670  e92d4070          PUSH     {r4-r6,lr}
000674  e1a05000          MOV      r5,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    */
000678  e355000c          CMP      r5,#0xc
00067c  ba000002          BLT      |L1.1676|
;;;551            return (OS_PRIO_INVALID);
000680  e3a0002a          MOV      r0,#0x2a
                  |L1.1668|
000684  e8bd4070          POP      {r4-r6,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    }
000688  e12fff1e          BX       lr
                  |L1.1676|
00068c  ef000002          SVC      0x2  ; formerly SWI   ;554
000690  e59f02c4          LDR      r0,|L1.2396|          ;555
000694  e7904105          LDR      r4,[r0,r5,LSL #2]     ;555
000698  e3540000          CMP      r4,#0                 ;556
00069c  1a000002          BNE      |L1.1708|             ;556
0006a0  ef000003          SVC      0x3  ; formerly SWI   ;557
0006a4  e3a00064          MOV      r0,#0x64              ;558
0006a8  eafffff5          B        |L1.1668|             ;558
                  |L1.1708|
0006ac  e5d4002c          LDRB     r0,[r4,#0x2c]         ;560
0006b0  e3100008          TST      r0,#8                 ;560
0006b4  0a00001a          BEQ      |L1.1828|             ;560
0006b8  e5d4002c          LDRB     r0,[r4,#0x2c]         ;561
0006bc  e3d00008          BICS     r0,r0,#8              ;561
0006c0  e5c4002c          STRB     r0,[r4,#0x2c]         ;561
0006c4  1a000013          BNE      |L1.1816|             ;561
0006c8  e1d402ba          LDRH     r0,[r4,#0x2a]         ;562
0006cc  e3500000          CMP      r0,#0                 ;562
0006d0  1a000010          BNE      |L1.1816|             ;562
0006d4  e5d40031          LDRB     r0,[r4,#0x31]         ;563
0006d8  e59f128c          LDR      r1,|L1.2412|          ;563
0006dc  e5d11000          LDRB     r1,[r1,#0]            ;563  ; OSRdyGrp
0006e0  e1800001          ORR      r0,r0,r1              ;563
0006e4  e59f1280          LDR      r1,|L1.2412|          ;563
0006e8  e5c10000          STRB     r0,[r1,#0]            ;563  ; OSRdyGrp
0006ec  e5d4002f          LDRB     r0,[r4,#0x2f]         ;564
0006f0  e59f1270          LDR      r1,|L1.2408|          ;564
0006f4  e7d10000          LDRB     r0,[r1,r0]            ;564
0006f8  e5d41030          LDRB     r1,[r4,#0x30]         ;564
0006fc  e1800001          ORR      r0,r0,r1              ;564
000700  e5d4102f          LDRB     r1,[r4,#0x2f]         ;564
000704  e59f225c          LDR      r2,|L1.2408|          ;564
000708  e7c20001          STRB     r0,[r2,r1]            ;564
00070c  ef000003          SVC      0x3  ; formerly SWI   ;565
000710  ebfffffe          BL       OS_Sched              ;566
000714  ea000000          B        |L1.1820|             ;566
                  |L1.1816|
000718  ef000003          SVC      0x3  ; formerly SWI   ;568
                  |L1.1820|
00071c  e3a00000          MOV      r0,#0                 ;570
000720  eaffffd7          B        |L1.1668|             ;570
                  |L1.1828|
000724  ef000003          SVC      0x3  ; formerly SWI   ;572
000728  e3a00065          MOV      r0,#0x65              ;573
00072c  eaffffd4          B        |L1.1668|             ;573
                          ENDP

                  OSTaskStkChk PROC
;;;596    INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)
;;;597    {
000730  e92d47f0          PUSH     {r4-r10,lr}
000734  e1a04000          MOV      r4,r0
000738  e1a05001          MOV      r5,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    */
00073c  e354000c          CMP      r4,#0xc
000740  da000004          BLE      |L1.1880|
000744  e35400ff          CMP      r4,#0xff
000748  0a000002          BEQ      |L1.1880|
;;;609            return (OS_PRIO_INVALID);
00074c  e3a0002a          MOV      r0,#0x2a
                  |L1.1872|
000750  e8bd47f0          POP      {r4-r10,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;
;;;617        }
;;;618        ptcb = OSTCBPrioTbl[prio];
;;;619        if (ptcb == (OS_TCB *)0) {                         /* Make sure task exist                         */
;;;620            OS_EXIT_CRITICAL();
;;;621            return (OS_TASK_NOT_EXIST);
;;;622        }
;;;623        if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set       */
;;;624            OS_EXIT_CRITICAL();
;;;625            return (OS_TASK_OPT_ERR);
;;;626        }
;;;627        free = 0;
;;;628        size = ptcb->OSTCBStkSize;
;;;629        pchk = ptcb->OSTCBStkBottom;
;;;630        OS_EXIT_CRITICAL();
;;;631    #if OS_STK_GROWTH == 1
;;;632        while (*pchk++ == (OS_STK)0) {                    /* Compute the number of zero entries on the stk */
;;;633            free++;
;;;634        }
;;;635    #else
;;;636        while (*pchk-- == (OS_STK)0) {
;;;637            free++;
;;;638        }
;;;639    #endif
;;;640        pdata->OSFree = free * sizeof(OS_STK);            /* Compute number of free bytes on the stack     */
;;;641        pdata->OSUsed = (size - free) * sizeof(OS_STK);   /* Compute number of bytes used on the stack     */
;;;642        return (OS_NO_ERR);
;;;643    }
000754  e12fff1e          BX       lr
                  |L1.1880|
000758  e3a00000          MOV      r0,#0                 ;612
00075c  e5850000          STR      r0,[r5,#0]            ;612
000760  e5850004          STR      r0,[r5,#4]            ;613
000764  ef000002          SVC      0x2  ; formerly SWI   ;614
000768  e35400ff          CMP      r4,#0xff              ;615
00076c  1a000002          BNE      |L1.1916|             ;615
000770  e59f01ec          LDR      r0,|L1.2404|          ;616
000774  e5900000          LDR      r0,[r0,#0]            ;616  ; OSTCBCur
000778  e5d0402d          LDRB     r4,[r0,#0x2d]         ;616
                  |L1.1916|
00077c  e59f01d8          LDR      r0,|L1.2396|          ;618
000780  e7906104          LDR      r6,[r0,r4,LSL #2]     ;618
000784  e3560000          CMP      r6,#0                 ;619
000788  1a000002          BNE      |L1.1944|             ;619
00078c  ef000003          SVC      0x3  ; formerly SWI   ;620
000790  e3a0000b          MOV      r0,#0xb               ;621
000794  eaffffed          B        |L1.1872|             ;621
                  |L1.1944|

⌨️ 快捷键说明

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