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

📄 os_task.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000798  e1d601b0          LDRH     r0,[r6,#0x10]         ;623
00079c  e3100001          TST      r0,#1                 ;623
0007a0  1a000002          BNE      |L1.1968|             ;623
0007a4  ef000003          SVC      0x3  ; formerly SWI   ;624
0007a8  e3a00082          MOV      r0,#0x82              ;625
0007ac  eaffffe7          B        |L1.1872|             ;625
                  |L1.1968|
0007b0  e3a08000          MOV      r8,#0                 ;627
0007b4  e596900c          LDR      r9,[r6,#0xc]          ;628
0007b8  e5967008          LDR      r7,[r6,#8]            ;629
0007bc  ef000003          SVC      0x3  ; formerly SWI   ;630
0007c0  ea000000          B        |L1.1992|             ;632
                  |L1.1988|
0007c4  e2888001          ADD      r8,r8,#1              ;633
                  |L1.1992|
0007c8  e4970004          LDR      r0,[r7],#4            ;632
0007cc  e3500000          CMP      r0,#0                 ;632
0007d0  0afffffb          BEQ      |L1.1988|             ;632
0007d4  e1a00108          LSL      r0,r8,#2              ;640
0007d8  e5850000          STR      r0,[r5,#0]            ;640
0007dc  e0490008          SUB      r0,r9,r8              ;641
0007e0  e1a00100          LSL      r0,r0,#2              ;641
0007e4  e5850004          STR      r0,[r5,#4]            ;641
0007e8  e3a00000          MOV      r0,#0                 ;642
0007ec  eaffffd7          B        |L1.1872|             ;642
                          ENDP

                  OSTaskSuspend PROC
;;;669    INT8U  OSTaskSuspend (INT8U prio)
;;;670    {
0007f0  e92d4070          PUSH     {r4-r6,lr}
0007f4  e1a04000          MOV      r4,r0
;;;671    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;672        OS_CPU_SR  cpu_sr;
;;;673    #endif
;;;674        BOOLEAN    self;
;;;675        OS_TCB    *ptcb;
;;;676    
;;;677    
;;;678    #if OS_ARG_CHK_EN > 0
;;;679        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to suspend idle task    */
0007f8  e354000c          CMP      r4,#0xc
0007fc  1a000002          BNE      |L1.2060|
;;;680            return (OS_TASK_SUSPEND_IDLE);
000800  e3a0005b          MOV      r0,#0x5b
                  |L1.2052|
000804  e8bd4070          POP      {r4-r6,lr}
;;;681        }
;;;682        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;683            return (OS_PRIO_INVALID);
;;;684        }
;;;685    #endif
;;;686        OS_ENTER_CRITICAL();
;;;687        if (prio == OS_PRIO_SELF) {                                 /* See if suspend SELF                 */
;;;688            prio = OSTCBCur->OSTCBPrio;
;;;689            self = TRUE;
;;;690        } else if (prio == OSTCBCur->OSTCBPrio) {                   /* See if suspending self              */
;;;691            self = TRUE;
;;;692        } else {
;;;693            self = FALSE;                                           /* No suspending another task          */
;;;694        }
;;;695        ptcb = OSTCBPrioTbl[prio];
;;;696        if (ptcb == (OS_TCB *)0) {                                  /* Task to suspend must exist          */
;;;697            OS_EXIT_CRITICAL();
;;;698            return (OS_TASK_SUSPEND_PRIO);
;;;699        }
;;;700        if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready                 */
;;;701            OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;702        }
;;;703        ptcb->OSTCBStat |= OS_STAT_SUSPEND;                         /* Status of task is 'SUSPENDED'       */
;;;704        OS_EXIT_CRITICAL();
;;;705        if (self == TRUE) {                                         /* Context switch only if SELF         */
;;;706            OS_Sched();
;;;707        }
;;;708        return (OS_NO_ERR);
;;;709    }
000808  e12fff1e          BX       lr
                  |L1.2060|
00080c  e354000c          CMP      r4,#0xc               ;682
000810  ba000003          BLT      |L1.2084|             ;682
000814  e35400ff          CMP      r4,#0xff              ;682
000818  0a000001          BEQ      |L1.2084|             ;682
00081c  e3a0002a          MOV      r0,#0x2a              ;683
000820  eafffff7          B        |L1.2052|             ;683
                  |L1.2084|
000824  ef000002          SVC      0x2  ; formerly SWI   ;686
000828  e35400ff          CMP      r4,#0xff              ;687
00082c  1a000004          BNE      |L1.2116|             ;687
000830  e59f012c          LDR      r0,|L1.2404|          ;688
000834  e5900000          LDR      r0,[r0,#0]            ;688  ; OSTCBCur
000838  e5d0402d          LDRB     r4,[r0,#0x2d]         ;688
00083c  e3a06001          MOV      r6,#1                 ;689
000840  ea000007          B        |L1.2148|             ;689
                  |L1.2116|
000844  e59f0118          LDR      r0,|L1.2404|          ;690
000848  e5900000          LDR      r0,[r0,#0]            ;690  ; OSTCBCur
00084c  e5d0002d          LDRB     r0,[r0,#0x2d]         ;690
000850  e1500004          CMP      r0,r4                 ;690
000854  1a000001          BNE      |L1.2144|             ;690
000858  e3a06001          MOV      r6,#1                 ;691
00085c  ea000000          B        |L1.2148|             ;691
                  |L1.2144|
000860  e3a06000          MOV      r6,#0                 ;693
                  |L1.2148|
000864  e59f00f0          LDR      r0,|L1.2396|          ;695
000868  e7905104          LDR      r5,[r0,r4,LSL #2]     ;695
00086c  e3550000          CMP      r5,#0                 ;696
000870  1a000002          BNE      |L1.2176|             ;696
000874  ef000003          SVC      0x3  ; formerly SWI   ;697
000878  e3a0005a          MOV      r0,#0x5a              ;698
00087c  eaffffe0          B        |L1.2052|             ;698
                  |L1.2176|
000880  e5d5002f          LDRB     r0,[r5,#0x2f]         ;700
000884  e59f10dc          LDR      r1,|L1.2408|          ;700
000888  e7d10000          LDRB     r0,[r1,r0]            ;700
00088c  e5d51030          LDRB     r1,[r5,#0x30]         ;700
000890  e1c00001          BIC      r0,r0,r1              ;700
000894  e21000ff          ANDS     r0,r0,#0xff           ;700
000898  e5d5102f          LDRB     r1,[r5,#0x2f]         ;700
00089c  e59f20c4          LDR      r2,|L1.2408|          ;700
0008a0  e7c20001          STRB     r0,[r2,r1]            ;700
0008a4  1a000005          BNE      |L1.2240|             ;700
0008a8  e5d50031          LDRB     r0,[r5,#0x31]         ;701
0008ac  e59f10b8          LDR      r1,|L1.2412|          ;701
0008b0  e5d11000          LDRB     r1,[r1,#0]            ;701  ; OSRdyGrp
0008b4  e1c10000          BIC      r0,r1,r0              ;701
0008b8  e59f10ac          LDR      r1,|L1.2412|          ;701
0008bc  e5c10000          STRB     r0,[r1,#0]            ;701  ; OSRdyGrp
                  |L1.2240|
0008c0  e5d5002c          LDRB     r0,[r5,#0x2c]         ;703
0008c4  e3800008          ORR      r0,r0,#8              ;703
0008c8  e5c5002c          STRB     r0,[r5,#0x2c]         ;703
0008cc  ef000003          SVC      0x3  ; formerly SWI   ;704
0008d0  e3560001          CMP      r6,#1                 ;705
0008d4  1a000000          BNE      |L1.2268|             ;705
0008d8  ebfffffe          BL       OS_Sched              ;706
                  |L1.2268|
0008dc  e3a00000          MOV      r0,#0                 ;708
0008e0  eaffffc7          B        |L1.2052|             ;708
                          ENDP

                  OSTaskQuery PROC
;;;728    INT8U  OSTaskQuery (INT8U prio, OS_TCB *pdata)
;;;729    {
0008e4  e92d4070          PUSH     {r4-r6,lr}
0008e8  e1a04000          MOV      r4,r0
0008ec  e1a06001          MOV      r6,r1
;;;730    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;731        OS_CPU_SR  cpu_sr;
;;;732    #endif
;;;733        OS_TCB    *ptcb;
;;;734    
;;;735    
;;;736    #if OS_ARG_CHK_EN > 0
;;;737        if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {   /* Task priority valid ?                    */
0008f0  e354000c          CMP      r4,#0xc
0008f4  da000004          BLE      |L1.2316|
0008f8  e35400ff          CMP      r4,#0xff
0008fc  0a000002          BEQ      |L1.2316|
;;;738            return (OS_PRIO_INVALID);
000900  e3a0002a          MOV      r0,#0x2a
                  |L1.2308|
000904  e8bd4070          POP      {r4-r6,lr}
;;;739        }
;;;740    #endif
;;;741        OS_ENTER_CRITICAL();
;;;742        if (prio == OS_PRIO_SELF) {                            /* See if suspend SELF                      */
;;;743            prio = OSTCBCur->OSTCBPrio;
;;;744        }
;;;745        ptcb = OSTCBPrioTbl[prio];
;;;746        if (ptcb == (OS_TCB *)0) {                             /* Task to query must exist                 */
;;;747            OS_EXIT_CRITICAL();
;;;748            return (OS_PRIO_ERR);
;;;749        }
;;;750        memcpy(pdata, ptcb, sizeof(OS_TCB));                   /* Copy TCB into user storage area          */
;;;751        OS_EXIT_CRITICAL();
;;;752        return (OS_NO_ERR);
;;;753    }
000908  e12fff1e          BX       lr
                  |L1.2316|
00090c  ef000002          SVC      0x2  ; formerly SWI   ;741
000910  e35400ff          CMP      r4,#0xff              ;742
000914  1a000002          BNE      |L1.2340|             ;742
000918  e59f0044          LDR      r0,|L1.2404|          ;743
00091c  e5900000          LDR      r0,[r0,#0]            ;743  ; OSTCBCur
000920  e5d0402d          LDRB     r4,[r0,#0x2d]         ;743
                  |L1.2340|
000924  e59f0030          LDR      r0,|L1.2396|          ;745
000928  e7905104          LDR      r5,[r0,r4,LSL #2]     ;745
00092c  e3550000          CMP      r5,#0                 ;746
000930  1a000002          BNE      |L1.2368|             ;746
000934  ef000003          SVC      0x3  ; formerly SWI   ;747
000938  e3a00029          MOV      r0,#0x29              ;748
00093c  eafffff0          B        |L1.2308|             ;748
                  |L1.2368|
000940  e3a02034          MOV      r2,#0x34              ;750
000944  e1a01005          MOV      r1,r5                 ;750
000948  e1a00006          MOV      r0,r6                 ;750
00094c  ebfffffe          BL       __aeabi_memcpy4       ;750
000950  ef000003          SVC      0x3  ; formerly SWI   ;751
000954  e3a00000          MOV      r0,#0                 ;752
000958  eaffffe9          B        |L1.2308|             ;752
                  |L1.2396|
00095c  00000000          DCD      OSTCBPrioTbl          ;752
                  |L1.2400|
000960  00000000          DCD      OSMapTbl              ;752
                  |L1.2404|
000964  00000000          DCD      OSTCBCur              ;752
                  |L1.2408|
000968  00000000          DCD      OSRdyTbl              ;752
                  |L1.2412|
00096c  00000000          DCD      OSRdyGrp              ;752
                  |L1.2416|
000970  00000000          DCD      OSTaskCtr             ;752
                  |L1.2420|
000974  00000000          DCD      OSRunning             ;752
                  |L1.2424|
000978  00000000          DCD      OSIntNesting          ;752
                  |L1.2428|
00097c  00000000          DCD      OSLockNesting         ;752
                  |L1.2432|
000980  00000000          DCD      OSTCBList             ;752
                  |L1.2436|
000984  00000000          DCD      OSTCBFreeList         ;752
                          ENDP


⌨️ 快捷键说明

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