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

📄 os_core.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0005f8  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
0005fc  e7d04001          LDRB     r4,[r0,r1]
;;;301            x             = OSUnMapTbl[OSRdyTbl[y]];
000600  e59f0530          LDR      r0,|L1.2872|
000604  e7d00004          LDRB     r0,[r0,r4]
000608  e59f1554          LDR      r1,|L1.2916|
00060c  e7d15000          LDRB     r5,[r1,r0]
;;;302            OSPrioHighRdy = (INT8U)((y << 3) + x);
000610  e0850184          ADD      r0,r5,r4,LSL #3
000614  e59f1524          LDR      r1,|L1.2880|
000618  e5c10000          STRB     r0,[r1,#0]  ; OSPrioHighRdy
;;;303            OSPrioCur     = OSPrioHighRdy;
00061c  e2810000          ADD      r0,r1,#0
000620  e5d00000          LDRB     r0,[r0,#0]  ; OSPrioHighRdy
000624  e59f1510          LDR      r1,|L1.2876|
000628  e5c10000          STRB     r0,[r1,#0]  ; OSPrioCur
;;;304            OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
00062c  e59f04f4          LDR      r0,|L1.2856|
000630  e59f1508          LDR      r1,|L1.2880|
000634  e5d11000          LDRB     r1,[r1,#0]  ; OSPrioHighRdy
000638  e7900101          LDR      r0,[r0,r1,LSL #2]
00063c  e59f1500          LDR      r1,|L1.2884|
000640  e5810000          STR      r0,[r1,#0]  ; OSTCBHighRdy
;;;305            OSTCBCur      = OSTCBHighRdy;
000644  e2810000          ADD      r0,r1,#0
000648  e5900000          LDR      r0,[r0,#0]  ; OSTCBHighRdy
00064c  e59f14f4          LDR      r1,|L1.2888|
000650  e5810000          STR      r0,[r1,#0]  ; OSTCBCur
;;;306            OSStartHighRdy();                            /* Execute target specific code to start task     */
000654  ebfffffe          BL       OSStartHighRdy
;;;307        }
;;;308    }
                  |L1.1624|
000658  e8bd4070          POP      {r4-r6,lr}
00065c  e12fff1e          BX       lr
                          ENDP

                  OSStatInit PROC
;;;331    void  OSStatInit (void)
;;;332    {
000660  e92d4010          PUSH     {r4,lr}
;;;333    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;334        OS_CPU_SR  cpu_sr;
;;;335    #endif    
;;;336        
;;;337        
;;;338        OSTimeDly(2);                                /* Synchronize with clock tick                        */
000664  e3a00002          MOV      r0,#2
000668  ebfffffe          BL       OSTimeDly
;;;339        OS_ENTER_CRITICAL();
00066c  ef000002          SVC      0x2  ; formerly SWI
;;;340        OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
000670  e3a00000          MOV      r0,#0
000674  e59f1480          LDR      r1,|L1.2812|
000678  e5810000          STR      r0,[r1,#0]  ; OSIdleCtr
;;;341        OS_EXIT_CRITICAL();
00067c  ef000003          SVC      0x3  ; formerly SWI
;;;342        OSTimeDly(OS_TICKS_PER_SEC);                 /* Determine MAX. idle counter value for 1 second     */
000680  e3a000c8          MOV      r0,#0xc8
000684  ebfffffe          BL       OSTimeDly
;;;343        OS_ENTER_CRITICAL();
000688  ef000002          SVC      0x2  ; formerly SWI
;;;344        OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1 second       */
00068c  e59f0468          LDR      r0,|L1.2812|
000690  e5900000          LDR      r0,[r0,#0]  ; OSIdleCtr
000694  e59f145c          LDR      r1,|L1.2808|
000698  e5810000          STR      r0,[r1,#0]  ; OSIdleCtrMax
;;;345        OSStatRdy    = TRUE;
00069c  e3a00001          MOV      r0,#1
0006a0  e59f144c          LDR      r1,|L1.2804|
0006a4  e5c10000          STRB     r0,[r1,#0]  ; OSStatRdy
;;;346        OS_EXIT_CRITICAL();
0006a8  ef000003          SVC      0x3  ; formerly SWI
;;;347    }
0006ac  e8bd4010          POP      {r4,lr}
0006b0  e12fff1e          BX       lr
                          ENDP

                  OSTimeTick PROC
;;;364    void  OSTimeTick (void)
;;;365    {
0006b4  e92d4010          PUSH     {r4,lr}
;;;366    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;367        OS_CPU_SR  cpu_sr;
;;;368    #endif    
;;;369        OS_TCB    *ptcb;
;;;370    
;;;371    
;;;372        OSTimeTickHook();                                      /* Call user definable hook                 */
0006b8  ebfffffe          BL       OSTimeTickHook
;;;373    #if OS_TIME_GET_SET_EN > 0   
;;;374        OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
0006bc  ef000002          SVC      0x2  ; formerly SWI
;;;375        OSTime++;
0006c0  e59f0484          LDR      r0,|L1.2892|
0006c4  e5900000          LDR      r0,[r0,#0]  ; OSTime
0006c8  e2800001          ADD      r0,r0,#1
0006cc  e59f1478          LDR      r1,|L1.2892|
0006d0  e5810000          STR      r0,[r1,#0]  ; OSTime
;;;376        OS_EXIT_CRITICAL();
0006d4  ef000003          SVC      0x3  ; formerly SWI
;;;377    #endif
;;;378        if (OSRunning == TRUE) {    
0006d8  e59f047c          LDR      r0,|L1.2908|
0006dc  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
0006e0  e3500001          CMP      r0,#1
0006e4  1a000025          BNE      |L1.1920|
;;;379            ptcb = OSTCBList;                                  /* Point at first TCB in TCB list           */
0006e8  e59f0434          LDR      r0,|L1.2852|
0006ec  e5904000          LDR      r4,[r0,#0]  ; OSTCBList
;;;380            while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {          /* Go through all TCBs in TCB list          */
0006f0  ea00001f          B        |L1.1908|
;;;381                OS_ENTER_CRITICAL();
                  |L1.1780|
0006f4  ef000002          SVC      0x2  ; formerly SWI
;;;382                if (ptcb->OSTCBDly != 0) {                     /* Delayed or waiting for event with TO     */
0006f8  e1d402ba          LDRH     r0,[r4,#0x2a]
0006fc  e3500000          CMP      r0,#0
000700  0a000019          BEQ      |L1.1900|
;;;383                    if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay   */
000704  e1d402ba          LDRH     r0,[r4,#0x2a]
000708  e2400001          SUB      r0,r0,#1
00070c  e1a00800          LSL      r0,r0,#16
000710  e1b00820          LSRS     r0,r0,#16
000714  e1c402ba          STRH     r0,[r4,#0x2a]
000718  1a000013          BNE      |L1.1900|
;;;384                        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
00071c  e5d4002c          LDRB     r0,[r4,#0x2c]
000720  e3100008          TST      r0,#8
000724  1a00000e          BNE      |L1.1892|
;;;385                            OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
000728  e5d40031          LDRB     r0,[r4,#0x31]
00072c  e59f1400          LDR      r1,|L1.2868|
000730  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000734  e1800001          ORR      r0,r0,r1
000738  e59f13f4          LDR      r1,|L1.2868|
00073c  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
;;;386                            OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
000740  e5d4002f          LDRB     r0,[r4,#0x2f]
000744  e59f13ec          LDR      r1,|L1.2872|
000748  e7d10000          LDRB     r0,[r1,r0]
00074c  e5d41030          LDRB     r1,[r4,#0x30]
000750  e1800001          ORR      r0,r0,r1
000754  e5d4102f          LDRB     r1,[r4,#0x2f]
000758  e59f23d8          LDR      r2,|L1.2872|
00075c  e7c20001          STRB     r0,[r2,r1]
000760  ea000001          B        |L1.1900|
;;;387                        } else {                               /* Yes, Leave 1 tick to prevent ...         */
;;;388                            ptcb->OSTCBDly = 1;                /* ... loosing the task when the ...        */
                  |L1.1892|
000764  e3a00001          MOV      r0,#1
000768  e1c402ba          STRH     r0,[r4,#0x2a]
;;;389                        }                                      /* ... suspension is removed.               */
;;;390                    }
;;;391                }
;;;392                ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list            */
                  |L1.1900|
00076c  e5944014          LDR      r4,[r4,#0x14]
;;;393                OS_EXIT_CRITICAL();
000770  ef000003          SVC      0x3  ; formerly SWI
                  |L1.1908|
000774  e5d4002d          LDRB     r0,[r4,#0x2d]         ;380
000778  e350000c          CMP      r0,#0xc               ;380
00077c  1affffdc          BNE      |L1.1780|             ;380
;;;394            }
;;;395        }
;;;396    }
                  |L1.1920|
000780  e8bd4010          POP      {r4,lr}
000784  e12fff1e          BX       lr
                          ENDP

                  OSVersion PROC
;;;413    {
;;;414        return (OS_VERSION);
000788  e3a000fc          MOV      r0,#0xfc
;;;415    }
00078c  e12fff1e          BX       lr
                          ENDP

                  OS_Dummy PROC
;;;432    {
;;;433    }
000790  e12fff1e          BX       lr
                          ENDP

                  OS_EventTaskRdy PROC
;;;459    INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
;;;460    {
000794  e92d41f0          PUSH     {r4-r8,lr}
000798  e1a03000          MOV      r3,r0
;;;461        OS_TCB *ptcb;
;;;462        INT8U   x;
;;;463        INT8U   y;
;;;464        INT8U   bitx;
;;;465        INT8U   bity;
;;;466        INT8U   prio;
;;;467    
;;;468    
;;;469        y    = OSUnMapTbl[pevent->OSEventGrp];            /* Find highest prio. task waiting for message   */
00079c  e5d37001          LDRB     r7,[r3,#1]
0007a0  e59f83bc          LDR      r8,|L1.2916|
0007a4  e7d84007          LDRB     r4,[r8,r7]
;;;470        bity = OSMapTbl[y];
0007a8  e59f73bc          LDR      r7,|L1.2924|
0007ac  e7d76004          LDRB     r6,[r7,r4]
;;;471        x    = OSUnMapTbl[pevent->OSEventTbl[y]];
0007b0  e2837008          ADD      r7,r3,#8
0007b4  e7d77004          LDRB     r7,[r7,r4]
0007b8  e7d8e007          LDRB     lr,[r8,r7]
;;;472        bitx = OSMapTbl[x];
0007bc  e59f73a8          LDR      r7,|L1.2924|
0007c0  e7d7500e          LDRB     r5,[r7,lr]
;;;473        prio = (INT8U)((y << 3) + x);                     /* Find priority of task getting the msg         */
0007c4  e08e7184          ADD      r7,lr,r4,LSL #3
0007c8  e20700ff          AND      r0,r7,#0xff
;;;474        if ((pevent->OSEventTbl[y] &= ~bitx) == 0x00) {   /* Remove this task from the waiting list        */
0007cc  e2837008          ADD      r7,r3,#8
0007d0  e7d77004          LDRB     r7,[r7,r4]
0007d4  e1c77005          BIC      r7,r7,r5
0007d8  e21770ff          ANDS     r7,r7,#0xff
0007dc  e2838008          ADD      r8,r3,#8
0007e0  e7c87004          STRB     r7,[r8,r4]
0007e4  1a000002          BNE      |L1.2036|
;;;475            pevent->OSEventGrp &= ~bity;                  /* Clr group bit if this was only task pending   */
0007e8  e5d37001          LDRB     r7,[r3,#1]
0007ec  e1c77006          BIC      r7,r7,r6
0007f0  e5c37001          STRB     r7,[r3,#1]
;;;476        }
;;;477        ptcb                 =  OSTCBPrioTbl[prio];       /* Point to this task's OS_TCB                   */
                  |L1.2036|
0007f4  e59f732c          LDR      r7,|L1.2856|
0007f8  e797c100          LDR      r12,[r7,r0,LSL #2]
;;;478        ptcb->OSTCBDly       =  0;                        /* Prevent OSTimeTick() from readying task       */
0007fc  e3a07000          MOV      r7,#0
000800  e1cc72ba          STRH     r7,[r12,#0x2a]
;;;479        ptcb->OSTCBEventPtr  = (OS_EVENT *)0;             /* Unlink ECB from this task                     */
000804  e58c701c          STR      r7,[r12,#0x1c]
;;;480    #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
;;;481        ptcb->OSTCBMsg       = msg;                       /* Send message directly to waiting task         */
000808  e58c1020          STR      r1,[r12,#0x20]
;;;482    #else
;;;483        msg                  = msg;                       /* Prevent compiler warning if not used          */
;;;484    #endif
;;;485        ptcb->OSTCBStat     &= ~msk;                      /* Clear bit associated with event type          */
00080c  e5dc702c          LDRB     r7,[r12,#0x2c]
000810  e1c77002          BIC      r7,r7,r2
000814  e5cc702c          STRB     r7,[r12,#0x2c]
;;;486        if (ptcb->OSTCBStat == OS_STAT_RDY) {             /* See if task is ready (could be susp'd)        */
000818  e5dc702c          LDRB     r7,[r12,#0x2c]
00081c  e3570000          CMP      r7,#0
000820  1a000009          BNE      |L1.2124|
;;;487            OSRdyGrp        |=  bity;                     /* Put task in the ready to run list             */
000824  e59f7308          LDR      r7,|L1.2868|
000828  e5d77000          LDRB     r7,[r7,#0]  ; OSRdyGrp
00082c  e1877006          ORR      r7,r7,r6
000830  e59f82fc          LDR      r8,|L1.2868|
000834  e5c87000          STRB     r7,[r8,#0]  ; OSRdyGrp
;;;488            OSRdyTbl[y]     |=  bitx;
000838  e59f72f8          LDR      r7,|L1.2872|
00083c  e7d77004          LDRB     r7,[r7,r4]

⌨️ 快捷键说明

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