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

📄 os_core.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;179        if (OSRunning == TRUE) {
000384  e59f07d0          LDR      r0,|L1.2908|
000388  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
00038c  e3500001          CMP      r0,#1
000390  1a000035          BNE      |L1.1132|
;;;180            OS_ENTER_CRITICAL();
000394  ef000002          SVC      0x2  ; formerly SWI
;;;181            if (OSIntNesting > 0) {                            /* Prevent OSIntNesting from wrapping       */
000398  e59f07b0          LDR      r0,|L1.2896|
00039c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0003a0  e3500000          CMP      r0,#0
0003a4  da000004          BLE      |L1.956|
;;;182                OSIntNesting--;
0003a8  e59f07a0          LDR      r0,|L1.2896|
0003ac  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0003b0  e2400001          SUB      r0,r0,#1
0003b4  e59f1794          LDR      r1,|L1.2896|
0003b8  e5c10000          STRB     r0,[r1,#0]  ; OSIntNesting
;;;183            }
;;;184            if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Reschedule only if all ISRs complete ... */
                  |L1.956|
0003bc  e59f078c          LDR      r0,|L1.2896|
0003c0  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0003c4  e3500000          CMP      r0,#0
0003c8  1a000026          BNE      |L1.1128|
0003cc  e59f0780          LDR      r0,|L1.2900|
0003d0  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0003d4  e3500000          CMP      r0,#0
0003d8  1a000022          BNE      |L1.1128|
;;;185                OSIntExitY    = OSUnMapTbl[OSRdyGrp];          /* ... and not locked.                      */
0003dc  e59f0780          LDR      r0,|L1.2916|
0003e0  e59f174c          LDR      r1,|L1.2868|
0003e4  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
0003e8  e7d00001          LDRB     r0,[r0,r1]
0003ec  e59f1774          LDR      r1,|L1.2920|
0003f0  e5c10000          STRB     r0,[r1,#0]  ; OSIntExitY
;;;186                OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
0003f4  e59f073c          LDR      r0,|L1.2872|
0003f8  e5d11000          LDRB     r1,[r1,#0]  ; OSIntExitY
0003fc  e7d00001          LDRB     r0,[r0,r1]
000400  e59f175c          LDR      r1,|L1.2916|
000404  e7d10000          LDRB     r0,[r1,r0]
000408  e59f1758          LDR      r1,|L1.2920|
00040c  e5d11000          LDRB     r1,[r1,#0]  ; OSIntExitY
000410  e0800181          ADD      r0,r0,r1,LSL #3
000414  e59f1724          LDR      r1,|L1.2880|
000418  e5c10000          STRB     r0,[r1,#0]  ; OSPrioHighRdy
;;;187                if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy */
00041c  e2810000          ADD      r0,r1,#0
000420  e5d00000          LDRB     r0,[r0,#0]  ; OSPrioHighRdy
000424  e59f1710          LDR      r1,|L1.2876|
000428  e5d11000          LDRB     r1,[r1,#0]  ; OSPrioCur
00042c  e1500001          CMP      r0,r1
000430  0a00000c          BEQ      |L1.1128|
;;;188                    OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
000434  e59f06ec          LDR      r0,|L1.2856|
000438  e59f1700          LDR      r1,|L1.2880|
00043c  e5d11000          LDRB     r1,[r1,#0]  ; OSPrioHighRdy
000440  e7900101          LDR      r0,[r0,r1,LSL #2]
000444  e59f16f8          LDR      r1,|L1.2884|
000448  e5810000          STR      r0,[r1,#0]  ; OSTCBHighRdy
;;;189                    OSCtxSwCtr++;                              /* Keep track of the number of ctx switches */
00044c  e59f070c          LDR      r0,|L1.2912|
000450  e5900000          LDR      r0,[r0,#0]  ; OSCtxSwCtr
000454  e2800001          ADD      r0,r0,#1
000458  e59f1700          LDR      r1,|L1.2912|
00045c  e5810000          STR      r0,[r1,#0]  ; OSCtxSwCtr
;;;190                    OSIntCtxSw();                              /* Perform interrupt level ctx switch       */
;;;191                }
;;;192            }
;;;193            OS_EXIT_CRITICAL();
;;;194        }
;;;195    }
                  |L1.1120|
000460  e8bd4010          POP      {r4,lr}
000464  e12fff1e          BX       lr
                  |L1.1128|
000468  ef000003          SVC      0x3  ; formerly SWI   ;193
                  |L1.1132|
00046c  eafffffb          B        |L1.1120|
                          ENDP

                  OSSchedLock PROC
;;;214    void  OSSchedLock (void)
;;;215    {
000470  e92d4010          PUSH     {r4,lr}
;;;216    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;217        OS_CPU_SR  cpu_sr;
;;;218    #endif    
;;;219        
;;;220        
;;;221        if (OSRunning == TRUE) {                     /* Make sure multitasking is running                  */
000474  e59f06e0          LDR      r0,|L1.2908|
000478  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
00047c  e3500001          CMP      r0,#1
000480  1a00000a          BNE      |L1.1200|
;;;222            OS_ENTER_CRITICAL();
000484  ef000002          SVC      0x2  ; formerly SWI
;;;223            if (OSLockNesting < 255) {               /* Prevent OSLockNesting from wrapping back to 0      */
000488  e59f06c4          LDR      r0,|L1.2900|
00048c  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000490  e35000ff          CMP      r0,#0xff
000494  aa000004          BGE      |L1.1196|
;;;224                OSLockNesting++;                     /* Increment lock nesting level                       */
000498  e59f06b4          LDR      r0,|L1.2900|
00049c  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0004a0  e2800001          ADD      r0,r0,#1
0004a4  e59f16a8          LDR      r1,|L1.2900|
0004a8  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
;;;225            }
;;;226            OS_EXIT_CRITICAL();
                  |L1.1196|
0004ac  ef000003          SVC      0x3  ; formerly SWI
;;;227        }
;;;228    }
                  |L1.1200|
0004b0  e8bd4010          POP      {r4,lr}
0004b4  e12fff1e          BX       lr
                          ENDP

                  OS_Sched PROC
;;;869    void  OS_Sched (void)
;;;870    {
0004b8  e92d4010          PUSH     {r4,lr}
;;;871    #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;872        OS_CPU_SR  cpu_sr;
;;;873    #endif    
;;;874        INT8U      y;
;;;875    
;;;876    
;;;877        OS_ENTER_CRITICAL();
0004bc  ef000002          SVC      0x2  ; formerly SWI
;;;878        if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked    */
0004c0  e59f0688          LDR      r0,|L1.2896|
0004c4  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0004c8  e3500000          CMP      r0,#0
0004cc  1a000020          BNE      |L1.1364|
0004d0  e59f067c          LDR      r0,|L1.2900|
0004d4  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0004d8  e3500000          CMP      r0,#0
0004dc  1a00001c          BNE      |L1.1364|
;;;879            y             = OSUnMapTbl[OSRdyGrp];          /* Get pointer to HPT ready to run              */
0004e0  e59f067c          LDR      r0,|L1.2916|
0004e4  e59f1648          LDR      r1,|L1.2868|
0004e8  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
0004ec  e7d04001          LDRB     r4,[r0,r1]
;;;880            OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
0004f0  e59f0640          LDR      r0,|L1.2872|
0004f4  e7d00004          LDRB     r0,[r0,r4]
0004f8  e59f1664          LDR      r1,|L1.2916|
0004fc  e7d10000          LDRB     r0,[r1,r0]
000500  e0800184          ADD      r0,r0,r4,LSL #3
000504  e59f1634          LDR      r1,|L1.2880|
000508  e5c10000          STRB     r0,[r1,#0]  ; OSPrioHighRdy
;;;881            if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy     */
00050c  e2810000          ADD      r0,r1,#0
000510  e5d00000          LDRB     r0,[r0,#0]  ; OSPrioHighRdy
000514  e59f1620          LDR      r1,|L1.2876|
000518  e5d11000          LDRB     r1,[r1,#0]  ; OSPrioCur
00051c  e1500001          CMP      r0,r1
000520  0a00000b          BEQ      |L1.1364|
;;;882                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
000524  e59f05fc          LDR      r0,|L1.2856|
000528  e59f1610          LDR      r1,|L1.2880|
00052c  e5d11000          LDRB     r1,[r1,#0]  ; OSPrioHighRdy
000530  e7900101          LDR      r0,[r0,r1,LSL #2]
000534  e59f1608          LDR      r1,|L1.2884|
000538  e5810000          STR      r0,[r1,#0]  ; OSTCBHighRdy
;;;883                OSCtxSwCtr++;                              /* Increment context switch counter             */
00053c  e59f061c          LDR      r0,|L1.2912|
000540  e5900000          LDR      r0,[r0,#0]  ; OSCtxSwCtr
000544  e2800001          ADD      r0,r0,#1
000548  e59f1610          LDR      r1,|L1.2912|
00054c  e5810000          STR      r0,[r1,#0]  ; OSCtxSwCtr
;;;884                OS_TASK_SW();                              /* Perform a context switch                     */
000550  ef000000          SVC      0x0  ; formerly SWI
;;;885            }
;;;886        }
;;;887        OS_EXIT_CRITICAL();
                  |L1.1364|
000554  ef000003          SVC      0x3  ; formerly SWI
;;;888    }
000558  e8bd4010          POP      {r4,lr}
00055c  e12fff1e          BX       lr
                          ENDP

                  OSSchedUnlock PROC
;;;248    void  OSSchedUnlock (void)
;;;249    {
000560  e92d4010          PUSH     {r4,lr}
;;;250    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;251        OS_CPU_SR  cpu_sr;
;;;252    #endif    
;;;253        
;;;254        
;;;255        if (OSRunning == TRUE) {                                   /* Make sure multitasking is running    */
000564  e59f05f0          LDR      r0,|L1.2908|
000568  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
00056c  e3500001          CMP      r0,#1
000570  1a000017          BNE      |L1.1492|
;;;256            OS_ENTER_CRITICAL();
000574  ef000002          SVC      0x2  ; formerly SWI
;;;257            if (OSLockNesting > 0) {                               /* Do not decrement if already 0        */
000578  e59f05d4          LDR      r0,|L1.2900|
00057c  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000580  e3500000          CMP      r0,#0
000584  da000011          BLE      |L1.1488|
;;;258                OSLockNesting--;                                   /* Decrement lock nesting level         */
000588  e59f05c4          LDR      r0,|L1.2900|
00058c  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000590  e2400001          SUB      r0,r0,#1
000594  e59f15b8          LDR      r1,|L1.2900|
000598  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
;;;259                if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled and not an ISR */
00059c  e2810000          ADD      r0,r1,#0
0005a0  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
0005a4  e3500000          CMP      r0,#0
0005a8  1a000006          BNE      |L1.1480|
0005ac  e59f059c          LDR      r0,|L1.2896|
0005b0  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0005b4  e3500000          CMP      r0,#0
0005b8  1a000002          BNE      |L1.1480|
;;;260                    OS_EXIT_CRITICAL();
0005bc  ef000003          SVC      0x3  ; formerly SWI
;;;261                    OS_Sched();                                    /* See if a HPT is ready                */
0005c0  ebfffffe          BL       OS_Sched
0005c4  ea000002          B        |L1.1492|
;;;262                } else {
;;;263                    OS_EXIT_CRITICAL();
                  |L1.1480|
0005c8  ef000003          SVC      0x3  ; formerly SWI
0005cc  ea000000          B        |L1.1492|
;;;264                }
;;;265            } else {
;;;266                OS_EXIT_CRITICAL();
                  |L1.1488|
0005d0  ef000003          SVC      0x3  ; formerly SWI
;;;267            }
;;;268        }
;;;269    }
                  |L1.1492|
0005d4  e8bd4010          POP      {r4,lr}
0005d8  e12fff1e          BX       lr
                          ENDP

                  OSStart PROC
;;;293    void  OSStart (void)
;;;294    {
0005dc  e92d4070          PUSH     {r4-r6,lr}
;;;295        INT8U y;
;;;296        INT8U x;
;;;297    
;;;298    
;;;299        if (OSRunning == FALSE) {
0005e0  e59f0574          LDR      r0,|L1.2908|
0005e4  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
0005e8  e3500000          CMP      r0,#0
0005ec  1a000019          BNE      |L1.1624|
;;;300            y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
0005f0  e59f056c          LDR      r0,|L1.2916|
0005f4  e59f1538          LDR      r1,|L1.2868|

⌨️ 快捷键说明

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